2012-04-11 28 views
0

我過濾的意圖這樣如何在關閉該應用程序時停止NDEF_DISCOVERED intent接收器?

<intent-filter>  
<action android:name="android.nfc.action.NDEF_DISCOVERED"/> 
<category android:name="android.intent.category.DEFAULT"/> 
<data android:mimeType="text/plain" /> 

現在的問題是,當我發現NDEF標籤靠近我的手機,我在我的應用程序實現的情況下運行(甚至我在關閉狀態的應用程序)。 如何阻止這一個?

回答

2

也許是最好的解決方案是使用NFC前景調度。但是關閉清單文件中的Intent過濾器可以通過在清單中使用<activity-alias> element來完成。通過將Intent過濾器置於<activity-alias>而不是<activity>元素本身,您可以在應用程序中禁用並啓用它。

因此,假設你有你的清單:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="your.app.package"> 
    ... 
    <activity-alias android:name=".yourActivityAlias" 
     android:enabled="true" android:targetActivity=".yourActivity"> 
    <intent-filter> 
     <action android:name="android.nfc.action.NDEF_DISCOVERED" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter> 
    </activity-alias> 
    .... 
</manifest> 

然後你就可以從活動中您的應用程序通過禁用<activity-alias>

PackageManager pkgMgr = getPackageManager(); 
ComponentName comp = new ComponentName("your.app.package", "your.app.package.yourActivityAlias"); 
pkgMgr.setComponentEnabledSetting(comp, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 
    PackageManager.DONT_KILL_APP); 

請注意,新的設置纔會生效在重新啓動應用程序(所以你可能要考慮0,而不是PackageManager.DONT_KILL_APP)。此外,包管理員通常需要一些時間才能使新設置生效(可能取決於設備的處理速度)。

+0

現在我只是用你的代碼...我在應用程序退出選項實現這...但是這個代碼不停止應用程序的過程。我想停止應用..... – Siva 2012-04-18 11:58:13

+0

調用'完成( )'... – 2012-04-18 15:03:16

+0

我使用的也有,但是本申請並不停止 PackageManager PKGMGR = getPackageManager(); \t ComponentName comp = new ComponentName(「com.usa.sis」,「com.usa.sis.NFCActivity」); \t pkgMgr.setComponentEnabledSetting(化合物,PackageManager.COMPONENT_ENABLED_STATE_DISABLED, \t 0); \t finish(); \t android.os.Process.killProcess(android.os.Process.myPid()); System.exit(0); 這是我的代碼.... – Siva 2012-04-19 04:59:24

相關問題