解决方案 »

  1.   

    nfc刷卡是在用Service实现的吧?
    登录以后才启动这个Service,或者用一个静态变量来记录是否登录成功,Service里面判断这个变量为true才会去读取卡号什么的操作,为false就不要操作。
      

  2.   

    我也是这样想的,下面附上代码和配置文件中的代码
    protected void onResume() {
    super.onResume();
    // 得到是否检测到ACTION_TECH_DISCOVERED触发
    if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) {
    // 处理该intent
    resolveIntent(getIntent());
    }else if(NfcAdapter.ACTION_TAG_DISCOVERED.equals(getIntent().getAction())){
    resolveIntent(getIntent());
    }else if(NfcAdapter.ACTION_TECH_DISCOVERED.equals(getIntent().getAction())){
    resolveIntent(getIntent());
    } }

    void resolveIntent(Intent intent) {
    String uid=Coverter.getUid(intent);
    String text="本标签的UID为"+"【"+uid+"】";
    Toast.makeText(this, text, Toast.LENGTH_SHORT).show();

    }
     <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name="com.lsh.readuid.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.TECH_DISCOVERED" />  
                </intent-filter>
                <meta-data  
                    android:name="android.nfc.action.TECH_DISCOVERED"  
                    android:resource="@xml/nfc_tech_filter" />
            </activity>
        </application>
      

  3.   

    不知道怎么判断哪个Service。PS:我是搞ios,android那边比较忙,过来帮忙搞这个nfc功能,业余班子,求指教
      

  4.   

    看你的配置文件,你就只有一个Activity啊....
    按2L说的,你把NFC那块写到Service里面去
      

  5.   

    你这个貌似登录是一个apk,nfc是另外一个apk?
    这样你需要在登录成功,启动nfc这个apk的时候,用Intent把是否登录成功的信息传递给nfc这个apk。在nfc这个apk中把Intent中对应的信息取出来,接下来的就可以处理了。
    从登录apk中启动nfc apk的代码大概是这个样子(这段代码在登录apk中):
            Intent intent = new Intent();
            intent.putExtra("login", false);//这里就可以传进去是否登录成功的信息,假设用bool值。
            ComponentName cn = new ComponentName(pagName, claName);            
            intent.setComponent(cn);
            startActivity(intent);
    在nfc apk中可以把这个bool值取出来:
    getIntent().getBooleanExtra("login", false);//这里的false是默认值,也就是没取到值就默认false,取到了值就按取到的来。
    这样你就可以判断到是不是登录了。其实你的应用的问题不在这里。你把登录和nfc分成了两个apk来做,所以用户可以在没登录的情况下启动nfc。正确的做法是放到一个apk里面,登录了以后才转到nfc界面。最不济,你也的把nfc这个apk的Manifest里的            <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
     
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>去掉,这样nfc apk就不会显示在Launcher里面,用户就不能在未登录时启动这个apk了。几种解决方案,看你怎么选了。
      

  6.   

    在一个apk里面怎么Manifest里面只有一个Activity呢?
    如果在一个apk里面,一样的做法。登录Activity跳转到nfc Activity的时候,用intent携带是否登录成功的信息,在nfc Activity里面把这个信息取出来。代码都在上面了。
      

  7.   

    NFC的处理流程应该是这样的
    1、在oncreate中初始化好nfc
    2、在onresume启用nfc
     mAdapter.enableForegroundDispatch(this, mPendingIntent, mFilters,
                                              mTechLists);
    3、在onpause中关闭nfc
    if(mAdapter != null && mAdapter.isEnabled())
                mAdapter.disableForegroundDispatch(this);
    4、当刷卡时,生命周期onpause->onnewintent->onresume读卡信息是在Onnewintent中来实现的,所以只需根据是否登录的标记来判断是否读卡就行
    在onnewintent中:
    if(login)
      获取卡信息;
    else
      return;
      

  8.   

    LZ可以吧响应nfc的activity设置成透明的 然后在onresume中接受读卡的数据然后通过广播发送出去,直接关闭掉这个activity我的项目就是这么做得