如何访问已运行的应用程序?

时间:2012-07-05 13:27:46

标签: android android-activity

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

如果我退出这个新实例,第一个实例仍在运行,这是关于我的应用程序的安全目标的问题。

我尝试使用FLAG_ACTIVITY_CLEAR_TOP在第一个实例中使用该活动,但它不起作用,因为它与操作系统启动的应用程序不同。

有办法做到这一点吗?如果是,你可以给我一些提示或一些线索吗?


我的清单:

<?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 - &gt; ExplorerActivity

分享流程:ChooseDialogActivity - &gt; ExplorerActivity

我想要的是,如果此活动已存在,则第二个ExplorerActivity必须与第一个ExplorerActivity相同。

3 个答案:

答案 0 :(得分: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实例。

答案 1 :(得分:0)

使用launchmode,这将保留主活动中的一个实例,以便对主页活动进行此更改。

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

答案 2 :(得分:-1)

尝试android:launchMode="singleInstance"