2012-07-05 42 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

相關問題