2011-04-12 44 views
2

我在写媒体文件共享应用程序。意图过滤器活动和正确显示通知

现在被分成两个部分:

<application> 
     <activity android:name="FileUploader" 
        android:label="..." 
        > 
      <intent-filter> 
       <action android:name="android.intent.action.SEND"/> 
       <data android:mimeType="*/*"/> 
       <category android:name="android.intent.category.DEFAULT"/> 
      </intent-filter> 
     </activity> 

    <service android:name=".FileUploaderService" /> 


    </application> 

FileUploader是应该从其他活动(例如廊或照相机。)推出的活性。 FileUploaderService是一个服务,它实际上传文件到HTTP服务器。它执行多个HTTP请求。

现在有可能用户在上传过程中按Home按钮并返回到主屏幕。 在这种情况下,我想通知当前上传阶段的详细信息,当用户点击时会将用户返回到活动状态。

我creatung这样的:

int icon = R.drawable.icon; 
    CharSequence tickerText = "Uploading File"; 
    long when = System.currentTimeMillis(); 

    Notification notification = new Notification(icon, tickerText, when); 

    Context context = getApplicationContext(); 
    CharSequence contentTitle = "Uploading File"; 
    CharSequence contentText = "Upload in progress. Stage #" + i; 

    Intent notificationIntent = new Intent(this, FileUploader.class); 
    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, 
      notificationIntent, 0); 

    notification.flags |= Notification.FLAG_AUTO_CANCEL; 
    notification.setLatestEventInfo(context, contentTitle, contentText, 
      contentIntent); 

    mNM.notify(R.layout.main, notification); 

的问题是,当我按在上传过程中home键 - 这是从画廊变得推出FileUploader活动实例“停止”,当我点击通知 - 第二FileUploader活动实例已启动。

那么有什么方法在点击通知而不是启动新通知时“返回”第一个活动?

我尝试以下方法,但非他们在这里工作:

  1. 调用完成()在FileUploader.onStop()方法 - 从纵向切换到横向当活动被关闭。

  2. 设置android:launchMode =“singleTask”用于AndroidManifest.xml中的FileUploader活动 - 此后我的应用程序开始出现在Recent Applications列表中,这是不可接受的,因为它允许从那里启动FileUploader活动,正如我所提到的在它上面只能通过从Gallery/Camera发送android.intent.action.SEND意图来启动。

  3. 用作用于发射第一个实例相同的目的 - 创造还是第二个实例和下面的警告是在日志:

    04-12 17:01:17.041:警告/ ActivityManager(1289):startActivity从所谓非活动上下文;迫使Intent.FLAG_ACTIVITY_NEW_TASK为:意向{ACT = android.intent.action.SEND典型值=图像/ JPEG CMP = .FileUploader bnds = [0628] [480723](具有额外)}

我还试图改变行:

Context context = getApplicationContext(); 

Context context = this; // FileUploadServiceContext 

但是,这并没有帮助。

嗯。我想,也许我发动错误的活动。可能我应该为我的FileUploader启动“父”活动。 例如:如果我从Gallery启动FileUploader,然后点击Home,然后再次从主屏幕启动Gallery - 我将返回到我的Activity。所以我想知道,也许我需要从通知中启动Gallery/Camera。但有2个问题:

  1. 如何确定我的活动的父母究竟是什么?

  2. 如果系统关闭了父母,该怎么办?

回答

0

好吧,我发现实现这个唯一的办法是:

android:excludeFromRecents="true" android:launchMode="singleTask" 

这是我想要的(比如我不能回到“父”应用程序。)履历表后不是100%,但总比没有好。

1

您不能依赖于能够在用户离开导航后“返回”任何活动。操作系统可以并且可以很好地摧毁它,所以不会有任何回报。我建议您为通知的意图添加额外功能,并重新创建活动以在启动时显示来自这些额外功能的适当数据。

+0

我明白了。但在这种情况下,如何: 1.当我用主页按钮退出时终止第一个Activity实例,但在布局更改时不会终止(例如)? 2.阻止我的活动显示在最近的应用程序列表中? – Forsaken 2011-04-12 13:53:35