首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

为什么小弟我的手机只有自带的程序能够读取到nfc标签但是小弟我自己写的应用却读不到呢?小弟我确定应用应该是没错的

2013-09-05 
为什么我的手机只有自带的程序能够读取到nfc标签但是我自己写的应用却读不到呢?我确定应用应该是没错的本

为什么我的手机只有自带的程序能够读取到nfc标签但是我自己写的应用却读不到呢?我确定应用应该是没错的
本帖最后由 DingXueBin001 于 2013-08-24 17:19:43 编辑 最近一直遇到这样的问题,为什么我的手机只有自带的程序能够读取到nfc标签但是我自己写的应用却读不到呢?我确定应用应该是没错的
谁能帮我解答解答呢?
这是我的代码:

package zwu.xxh.nfc_demo; 
import android.app.Activity;  
import android.content.Intent;  
import android.nfc.NfcAdapter;  
import android.nfc.Tag;  
import android.nfc.tech.MifareClassic;  
import android.os.Bundle;  
import android.widget.TextView;  
  
public class Beam extends Activity {  
    NfcAdapter nfcAdapter;  
    TextView promt;  
    byte a[]={(byte)0xff,(byte)0xff,(byte)0xff,(byte)0xff,(byte)0xff,(byte)0xff,(byte)0xff,(byte)0xff,(byte)0xff,(byte)0xff,(byte)0xff,(byte)0xff};
    
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        promt = (TextView) findViewById(R.id.promt);  
        // 获取默认的NFC控制器  
        nfcAdapter = NfcAdapter.getDefaultAdapter(this);  
        if (nfcAdapter == null) {  
            promt.setText("设备不支持NFC!");  
            finish();  
            return;  
        }  
        if (!nfcAdapter.isEnabled()) {  
            promt.setText("请在系统设置中先启用NFC功能!");  
            finish();  
            return;  
        }  
    }  
  
    @Override  
    protected void onResume() {  
        super.onResume();  


        //得到是否检测到ACTION_TECH_DISCOVERED触发  
        if (NfcAdapter.ACTION_TECH_DISCOVERED.equals(getIntent().getAction())) {  
            //处理该intent  
            processIntent(getIntent());  
        }  
    }  
    //字符序列转换为16进制字符串  
    private String bytesToHexString(byte[] src) {  
        StringBuilder stringBuilder = new StringBuilder("0x");  
        if (src == null || src.length <= 0) {  
            return null;  
        }  
        char[] buffer = new char[2];  
        for (int i = 0; i < src.length; i++) {  
            buffer[0] = Character.forDigit((src[i] >>> 4) & 0x0F, 16);  
            buffer[1] = Character.forDigit(src[i] & 0x0F, 16);  
            //System.out.println(buffer);  
            stringBuilder.append(buffer);  
        }  
        return stringBuilder.toString();  
    }  
  
    /** 
     * Parses the NDEF Message from the intent and prints to the TextView 
     */  
    private void processIntent(Intent intent) {  
        //取出封装在intent中的TAG  
        Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);  
        for (String tech : tagFromIntent.getTechList()) {  
          //  System.out.println(tech);  


        }  
        boolean auth = false;  
        //读取TAG  
        MifareClassic mfc = MifareClassic.get(tagFromIntent);  
        try {  
            String metaInfo = "";  
            //Enable I/O operations to the tag from this TagTechnology object.  
            mfc.connect();  
            int type = mfc.getType();//获取TAG的类型  
            int sectorCount = mfc.getSectorCount();//获取TAG中包含的扇区数  
            String typeS = "";  
            switch (type) {  
            case MifareClassic.TYPE_CLASSIC:  
                typeS = "TYPE_CLASSIC";  
                break;  
            case MifareClassic.TYPE_PLUS:  
                typeS = "TYPE_PLUS";  
                break;  
            case MifareClassic.TYPE_PRO:  
                typeS = "TYPE_PRO";  
                break;  
            case MifareClassic.TYPE_UNKNOWN:  
                typeS = "TYPE_UNKNOWN";  
                break;  
            }  


            metaInfo += "卡片类型:" + typeS + "\n共" + sectorCount + "个扇区\n共"  
                    + mfc.getBlockCount() + "个块\n存储空间: " + mfc.getSize() + "B\n";  
            for (int j = 0; j < sectorCount; j++) {  
                //Authenticate a sector with key A.  
               // auth = mfc.authenticateSectorWithKeyA(j, MifareClassic.KEY_DEFAULT);  
                auth = mfc.authenticateSectorWithKeyA(j, a);
               // System.out.println("xxh+"+bytesToHexString(MifareClassic.KEY_DEFAULT));
                int bCount;  
                int bIndex;  
                if (auth) {  
                    metaInfo += "Sector " + j + ":验证成功\n";  
                    // 读取扇区中的块  
                    bCount = mfc.getBlockCountInSector(j);  
                    bIndex = mfc.sectorToBlock(j);  
                    for (int i = 0; i < bCount; i++) {  
                        byte[] data = mfc.readBlock(bIndex);  
                        metaInfo += "Block " + bIndex + " : "  


                                + bytesToHexString(data) + "\n";  
                        bIndex++;  
                    }  
                } else {  
                    metaInfo += "Sector " + j + ":验证失败\n";  
                }  
            }  
            promt.setText(metaInfo);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
}


但是每次读取时,只是手机自带的读取到而应用却没有读取到!!把手机自带的给停用之后还是读不到!! NFC Android 移动开发
[解决办法]
参考官方API android-sdk-windows/docs/guide/topics/connectivity/nfc/nfc.html
activity里面要配置过滤器
<intent-filter>
    <action android:name="android.nfc.action.TAG_DISCOVERED"/>
</intent-filter>
[解决办法]
手机自带的能得到 你的不行 那估计是权限问题了  搞成系统app试试
[解决办法]

引用:
Quote: 引用:

手机自带的能得到 你的不行 那估计是权限问题了  搞成系统app试试

这个要怎样弄成系统app呢?设置吗?


额  push到system/app下或者使用手机的源码下的签名(使用platform签名)

热点排行