- I run my application “A” normally with the launch icon in the “Applications” menu.
- I press the home button, so my application “A” is still running on my phone.
- Now I browse my files presents in my phone, and I use the share action to share this file with my application “A”.
- The file is sharing perfectly, but instead of using the instance of my application already opened, it opens a new instance of my application “A”.
If I quit this new instance, the first instance is still running and it’s a problem concerning the security goal of my application.
I try to use the FLAG_ACTIVITY_CLEAR_TOP to use the activity in the first instance, but it doesn’t work because it isn’t the same application which is launched by the OS.
Is there a way to do this ? And if yes can you give me some hints or some leads to follow ?
My manifest :
<?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>
Here is my manifest. Usual process : SplashScreenActivity -> ExplorerActivity
Share process : ChooseDialogActivity -> ExplorerActivity
What I want, it’s that the second ExplorerActivity has to be the same that the first ExplorerActivity if this activity already exists.
Please don’t use launchMode=”singleInstance”. This is not what you want. singleInstance is only for HOME-screens and similar apps.
Try instead to use
Intent.FLAG_ACTIVITY_NEW_TASKwhen sharing. This will separate your application from the files-browsing application and may get the behaviour you want. You may also need to addFLAG_ACTIVIY_CLEAR_TOPas well, depending on how you’ve programmed your app.EDIT
When you launch ExplorerActivity from ChooserActivity, do this (or something similar):
If there is already a task running that contains the ChooserActivity, this should bring that task to the foreground instead of creating a new instace of ChooserActivity.