0
  • 我通常使用“应用程序”菜单中的启动图标运行我的应用程序“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 -> ExplorerActivity

分享过程:ChooseDialogActivity -> ExplorerActivity

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

4

3 回答 3

1

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

尝试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 实例。

于 2012-07-05T13:36:38.167 回答
0

使用启动模式,这将使一个实例远离您的主要活动,因此对家庭活动进行此更改。

<activity ..
...
..
android:launchMode="singleInstance" />
于 2012-07-05T13:32:05.533 回答
-1

尝试android:launchMode="singleInstance"

于 2012-07-05T13:33:28.170 回答