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

私が望むのは、このアクティビティが既に存在する場合、2 番目は 1 番目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

launchmode を使用すると、メイン アクティビティから 1 つのインスタンスが保持されるため、ホーム アクティビティに対してこの変更を行います。

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

試すandroid:launchMode="singleInstance"

于 2012-07-05T13:33:28.170 に答える