我有一个应用程序是共享目标。它是一个单一的活动体系结构,清单中具有 launchMode="singleTask"。
所有其他应用程序在将数据共享到我的应用程序时,似乎都遵循这一点,因此,即使之前打开了活动,也会打开相同的实例。
但是,Google文件似乎总是强制使用我的活动的新实例,并且始终保留在他们的任务中。
我调试了意图标志,但我不太聪明:
FLAG_ACTIVITY_FORWARD_RESULT|FLAG_ACTIVITY_NEW_TASK|FLAG_ACTIVITY_PREVIOUS_IS_TOP|FLAG_GRANT_READ_URI_PERMISSION|FLAG_RECEIVER_FOREGROUND
我该如何防止这种情况?我不希望我的单个活动超过 1 个实例。甚至 launchMode="singleInstance" 都不起作用。
<activity
android:name=".MainActivity"
android:launchMode="singleTask"
android:windowSoftInputMode="adjustResize|stateHidden">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<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>
如何防止这种情况?我不希望我的单个活动超过 1 个实例。
您可以尝试检测标志是否丢失,或者您的活动是否不是任务根目录,然后启动新活动并终止属于Google文件文件任务的活动。像这样:
@Override
protected void onCreate(Bundle state) {
super.onCreate(state);
setContentView(R.layout.main);
if (!isTaskRoot()) { // Or check getIntent().getFlags() for SINGLE_INSTANCE
Intent newIntent = new Intent(getIntent());
newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(newIntent);
finish();
}
}
希望对您有所帮助!