像这样从DeepLink
检测到某个网址后,我使用NFC
启动了我的应用程序。
<activity
android:name=".view.main.MainActivity"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<action android:name="android.nfc.action.TECH_DISCOVERED" />
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.DEFAULT" />
<data
android:host="example.com"
android:scheme="http" />
</intent-filter>
<meta-data
android:name="android.nfc.action.TECH_DISCOVERED"
android:resource="@xml/nfc_tech_filter" />
</activity>
但是,即使我已经启动了我的应用程序,它仍然可以工作。因此,重复的活动不断出现。有时,它会导致我的应用出现故障或崩溃。我只想在不使用应用程序时使用Deeplink
。
有什么办法可以解决这个问题?
答案 0 :(得分:1)
您可以使用launchMode="singleTop"
。这样,如果活动已经启动并且在堆栈的顶部,则任何新的启动都将通过该实例进行路由,您可以在onNewIntent()
方法中将其作为回调。
<activity android:name=".view.main.MainActivity"
android:launchMode="singleTop" />
答案 1 :(得分:1)
Dinesh的解决方案似乎应该可以工作,但是,如果给您带来了问题,您可以尝试另一种方法(更复杂)。您可以使用NfcAdapter.enableForegroundDispatch()
方法来控制活动内部的android.nfc.action.TECH_DISCOVERED
操作,并确保它什么也不做。
您可以通过将以下两种方法添加到MainActivity
中(或将代码添加到现有方法中)来实现:
@Override
protected void onResume() {
super.onResume();
//create a broadcast intent that doesn't trigger anything
Intent localIntent = new Intent("fake.action");
localIntent.setPackage(getApplicationContext().getPackageName());
localIntent.setFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
//set the NFC adapter to trigger our broadcast intent
NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this);
nfcAdapter.enableForegroundDispatch(
this,
PendingIntent.getBroadcast(this, 0, localIntent, PendingIntent.FLAG_UPDATE_CURRENT),
new IntentFilter[] {new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED)},
new String[][] { { "android.nfc.tech.IsoDep" /* add other tag types as necessary */ } });
}
@Override
protected void onPause() {
super.onPause();
NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this);
nfcAdapter.disableForegroundDispatch(this);
}
现在,只要您的活动可见并且检测到NFC标签,就不会触发任何操作。 (或者,更具体地说,它将触发未注册任何方法的广播。)
希望这会有所帮助。