我正在开发从NFC卡读取的应用程序。 问题如下: 用户点击应用图标启动应用程序。 应用程序已准备好扫描NFC卡,实现前台调度系统:
//Initialize Foreground NFC Dispatch System
mAdapter = NfcAdapter.getDefaultAdapter(this);
context=this;
mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this,
getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED);
try {
ndef.addDataType("*/*"); /* Handles all MIME based dispatches.
You should specify only the ones that you need.
*/
}
catch (IntentFilter.MalformedMimeTypeException e) {
throw new RuntimeException("fail", e);
}
mFilters = new IntentFilter[] { ndef, };
mTechLists = new String[][] { new String[] { MifareClassic.class.getName() }
};
在清单中我有:
<activity
android:name="com.d_logic.cardcontrol.SplashScreenActivity"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
<action android:name="android.nfc.action.TECH_DISCOVERED"/>
</intent-filter>
<meta-data>
<android:name="android.nfc.action.TECH_DISCOVERED">
<android:resource="@xml/techlist"/>
</activity>
应用程序启动,用户按下主页按钮后。 之后在后台运行应用程序,用户再次启动应用程序,但这次使用NFC卡。
此时我有两个相同应用程序运行的实例。
如何防止第二次启动应用程序,但仍然能够使用NFC卡启动应用程序? 谢谢!
答案 0 :(得分:0)
避免两次使用此逻辑:
//put here in variable global
private long twiceCall;
private static final int time_interval = 1500;
// and put this to avoiding twice calling
if (twiceCall + time_interval > System.currentTimeMillis()) {
// If get the second time..
} else {
// Get the first time..
}
twiceCall = System.currentTimeMillis();
答案 1 :(得分:0)
利用
android:launchMode:"standard/singleTop/singleTask/singleInstance"
清单中的确保将相同的Activity实例放到前面并传递新的Intent。您选择哪种模式取决于您的确切用例。
“singleTop”或“singleTask”可能适用于您的NFC用例。