2014-11-08 2 views
-1

У меня есть тег, содержащий контент приложения Android Play. Когда телефон приблизится к нему, он по умолчанию откроет страницу приложения в Android Play Store. Теперь я хочу, чтобы написать приложение, можно прочитать этот тег. Так что я изменить AndroidManifest.xml, как показано ниже:Чтение тега NFC содержит контент приложения Android Play

<uses-permission android:name="android.permission.NFC" /> 
...... 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 

     <intent-filter> 
      <action android:name="android.nfc.action.NDEF_DISCOVERED" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <data 
       android:host="ext" 
       android:pathPrefix="/android.com:pkg" 
       android:scheme="vnd.android.nfc" /> 
     </intent-filter> 
...... 

Я использую другой Tag App читать этот тег, он имеет содержание, как:

NDEF message 
EXTERNAL: urn:nfc:ext:android.com:pkg 
com.example.app 

Я думаю, что ключевым моментом является намерение фильтра. Но я не могу обедать своим приложением, когда подхожу к этому тегу. Независимо от того, мое приложение находится в фоновом режиме или на переднем плане. Кто-нибудь может мне помочь? Благодарю.

+0

[Проверьте это, если оно помогает] (http://stackoverflow.com/a/26698189/2591002) И если у вас есть другое приложение, которое также регистрируется для того же действия , вам будет предоставлен диалог для выбора приложения, которое вы хотите открыть. –

+0

Нет диалога, чтобы выбрать приложение, пока на переднем плане нет приложения. И я думаю, что если несколько приложений, зарегистрированных для одного действия, приложение foreground будет по умолчанию обеденным. –

+0

, но если на переднем плане нет приложения, то он также открывает приложение (если есть только одно) или показывает диалог .. вы проверили эту ссылку? –

ответ

0

Я просто нахожу ответ. Я неправильно понимаю значение переднего плана, чтобы этот APP работал на переднем плане. Он должен добавить enableForegroundDispatch, как показано ниже:

private NfcAdapter nfcAdapter; 
private PendingIntent mPendingIntent; 
private IntentFilter[] mFilters; 
private String[][] mTechLists; 

protected void onCreate(Bundle savedInstanceState) 
    nfcAdapter = NfcAdapter.getDefaultAdapter(this); 
    mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0); 
    IntentFilter ndefPkg = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED); 
    try { 
     ndefPkg.addDataScheme("vnd.android.nfc"); 
     ndefPkg.addDataAuthority("ext", null); 
     ndefPkg.addDataPath("/android.com:pkg", 0); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    mFilters = new IntentFilter[] {ndefPkg; 
    mTechLists = new String[][] { new String[] { NfcF.class.getName() } }; 
} 

protected void onResume() { 
    super.onResume(); 
    nfcAdapter.enableForegroundDispatch(this, mPendingIntent, mFilters, mTechLists); 
} 

protected void onPause() { 
    super.onPause(); 
    nfcAdapter.disableForegroundDispatch(this); 
} 
Смежные вопросы