首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android NFC中的前景调度系统问题

Android NFC中的前景调度系统问题
EN

Stack Overflow用户
提问于 2012-02-03 09:24:41
回答 2查看 2.2K关注 0票数 1

我想在其他几个NFC应用程序中创建一个特定的NFC应用程序,它应该具有以下功能

  1. 只有在设备上扫描具有特定文本(NDEF类型)的NFC标记时,应用程序才会启动。(这意味着如果点击了任何其他文本类型的标记,则不应显示我的应用程序)
  2. 在启动应用程序时,设备中所有NFC应用程序的“完全操作使用”和列表选项不应该存在。

在这里,我已经实现了前台调度系统,但是它只列出了所有具有NDEF_DISCOVERED优先级的NFC应用程序。

清单文件的代码片段如下:

代码语言:javascript
复制
   <activity android:name=".NFCDiscovered" android:label="@string/app_name">
       <intent-filter>
            <action android:name="android.nfc.action.NDEF_DISCOVERED" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="text/plain" />
        </intent-filter>  
    </activity>


</application>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.NFC" />
<uses-feature android:name="android.hardware.nfc" android:required="true" />

在这里,NFCDiscovered.java负责读取具有前景分派系统的特定文本类型NFC标记。用于此的代码片段如下:

代码语言:javascript
复制
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.nfcreader);
    mAdapter = NfcAdapter.getDefaultAdapter(this);

    mPendingIntent = PendingIntent.getActivity(this, 0,new 
    Intent(this,getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);        
    IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
    try {
        ndef.addDataType("text/plain");

    } catch (MalformedMimeTypeException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } 

    mFilters = new IntentFilter[] { ndef }; 

    //resolveIntent(getIntent());

}

public void onResume() {
    super.onResume();
    // TODO Auto-generated method stub
    TextView myText= (TextView)findViewById(R.id.nfcTxt);
    super.onResume();        
    if (mAdapter != null) 
        mAdapter.enableForegroundDispatch(this, mPendingIntent, 
          mFilters,null);




}
protected void onNewIntent(Intent intent) { 
    NdefMessage[] msgs = null;
    if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())){
        Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
        if (rawMsgs != null) {
            msgs = new NdefMessage[rawMsgs.length];
            for (int i = 0; i < rawMsgs.length; i++) {
                msgs[i] = (NdefMessage) rawMsgs[i];
            }
        }

    }
    List<TextRecord> records = NdefMessageParser.parse(msgs[0]);
    String text = null;
    for(TextRecord local:records)
    {
         text = local.getText();
    }
    //myText.setText("text :"+msgs);



}
public void onPause() {        
    super.onPause();        
    if (mAdapter != null) mAdapter.disableForegroundDispatch(this);    
}

如果有人能告诉我我错过了什么就太好了。

提前感谢

EN

回答 2

Stack Overflow用户

发布于 2012-02-26 21:59:50

如果您控制了NFC标记的内容,并且正在使用Android4.0,请考虑在文本消息之后添加一个Android应用程序记录

票数 0
EN

Stack Overflow用户

发布于 2015-04-24 20:17:44

三项评论:

  1. 您可以创建和初始化IntentFilter对象,并使用它。为了清楚起见,也许您应该删除该代码,因为您已经在AndroidManifest.xml文件中使用了前台调度机制。
  2. 建议使用Google中的NFC阅读器应用程序来收集有关您试图读取或写入的NFC标记的信息。应用程序可以给出标签支持的技术列表和它所拥有的内存容量。
  3. 也许你可以先从主动阅读模式开始。在代码段下面。 @Override void onResume(){ super.onResume();//在这里扫描代码。NfcAdapter mNfcAdapter = NfcAdapter.getDefaultAdapter(this);//禁用前台调度mNfcAdapter.disableForegroundDispatch(this);Bundle bundle =null();// mNfcAdapter.enableReaderMode(this,this,NfcAdapter.FLAG_READER_NFC_A,null) };

然后,您可以专注于NFC消息本身,而不是活动分派。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9126335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档