2012-07-05 41 views
0
  • 我通常在“应用程序”菜单中使用启动图标运行我的应用程序“A”。
  • 我按下主页按钮,所以我的应用程序“A”仍在我的手机上运行。
  • 现在我浏览我手机中的文件,并使用共享操作与我的应用程序“A”共享此文件。
  • 该文件完全共享,但不是使用已打开的应用程序实例,而是打开我的应用程序“A”的新实例。

如果我退出这个新实例,第一个实例仍在运行,这是一个有关我的应用程序安全性目标的问题。我该如何访问已在运行的应用程序?

我尝试使用FLAG_ACTIVITY_CLEAR_TOP在第一个实例中使用活动,但它不起作用,因为它不是由OS启动的同一个应用程序。

有没有办法做到这一点?如果是的话,你能给我一些提示或一些线索跟随?


我的清单:

<?xml version="1.0" encoding="utf-8"?> 

<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="8" /> 

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@android:style/Theme.NoTitleBar" > 
    <activity android:name=".SplashScreenActivity" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".ExplorerActivity" 
     android:configChanges="orientation|keyboardHidden" 
     android:theme="@android:style/Theme.Light.NoTitleBar" > 
    </activity> 
    <activity 
     android:name=".ChooseDialogActivity" 
     android:theme="@android:style/Theme.Translucent.NoTitleBar" > 
     <intent-filter> 
      <action android:name="android.intent.action.SEND" /> 

      <category android:name="android.intent.category.DEFAULT" /> 

      <data android:mimeType="*/*" /> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.intent.action.SEND_MULTIPLE" /> 

      <category android:name="android.intent.category.DEFAULT" /> 

      <data android:mimeType="*/*" /> 
     </intent-filter> 
    </activity> 
</application> 

这里是我的清单。通常的过程:SplashScreenActivity - > ExplorerActivity

分享过程:ChooseDialogActivity - > ExplorerActivity

我想要什么,那就是第二ExplorerActivity必须是第一ExplorerActivity如果这个活动已经存在相同的。

+0

发布您的清单 – 2012-07-05 14:02:29

回答

1

请不要使用launchMode = “singleInstance”。这不是你想要的。 singleInstance仅适用于HOME屏幕和类似的应用程序。

尝试改为在共享时使用Intent.FLAG_ACTIVITY_NEW_TASK。这会将您的应用程序与文件浏览应用程序分开,并可能获得您想要的行为。您可能还需要添加FLAG_ACTIVIY_CLEAR_TOP,具体取决于您对应用编程的方式。

编辑

当您从ChooserActivity推出ExplorerActivity,做这个(或类似的东西):

Intent intent = new Intent(this, ChooserActivity.class); 
intent.addFlags(Intent.ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(intent); 

如果已经有包含ChooserActivity正在运行的任务,这应该让该任务而不是创造一个ChooserActivity的新实例。

+0

一个非常好的答案,它完全符合我的要求。谢谢你解决我的问题。 – grattmandu03 2012-07-05 14:29:47

+0

啊,很好。我添加了一些更多的细节,以防万一你不知道。很高兴有帮助。 – 2012-07-05 14:32:59

0

使用launchmode这将使您的主要活动保持一个实例,因此请对家庭活动进行此更改。

<activity .. 
... 
.. 
android:launchMode="singleInstance" /> 
+0

launchMode =“singleInstance”用于HOME屏幕和类似的应用程序。这不是正确的解决方案 – 2012-07-05 13:37:14

-1

尝试android:launchMode="singleInstance"

+0

launchMode =“singleInstance”用于HOME屏幕和类似的应用程序。这不是正确的解决方案 – 2012-07-05 14:33:33

相关问题