请选择 进入手机版 | 继续访问电脑版
帖子
帖子
用户
博客
课程
123下一页
返回列表 发新帖
重点看下代码,开发给的建议
4
帖子
0
勋章
83
Y币
package com.example.tpsmodule.nfc;

import android.app.Activity;
import android.app.PendingIntent;
import android.content.Intent;
import android.content.IntentFilter;
import android.nfc.NfcAdapter;
import android.nfc.Tag;
import android.nfc.tech.IsoDep;
import android.nfc.tech.MifareClassic;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.widget.Toast;

import com.example.tpsmodule.R;
import com.example.tpsmodule.StringUtils;

import java.util.Timer;
import java.util.TimerTask;

public class NfcDialog extends Activity  {

    //---------控件定义------------

    // NFC parts
    private static NfcAdapter nfcAdapter;
    private static PendingIntent mPendingIntent;

    private static IntentFilter[] mFilters;
    private static String[][] mTechLists;
    private Intent mIntent = null;
    private  String  TAG="NfcDialog";


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.activity_nfc);
        Log.e(TAG,"onCreate");


        nfcAdapter = NfcAdapter.getDefaultAdapter(this);

        if (nfcAdapter == null) {
            NfcTag.getInstance().isflg=false;
//            Toast.makeText(getApplicationContext(), "No support NFC!", Toast.LENGTH_SHORT).show();
            return;
        }
        if (!nfcAdapter.isEnabled()) {
            NfcTag.getInstance().isflg=false;
            Toast.makeText(getApplicationContext(), "请在系统设置中先启用NFC功能!", Toast.LENGTH_SHORT).show();
        }
        NfcTag.getInstance().isflg=true;
//        Toast.makeText(getApplicationContext(), "NFC打开成功", Toast.LENGTH_SHORT).show();
        mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this,
                getClass()), 0);
        IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED);
        try {
            ndef.addDataType("*/*");
        } catch (IntentFilter.MalformedMimeTypeException e) {
            throw new RuntimeException("fail", e);
        }
        mFilters = new IntentFilter[]{ndef};

        //设置
        mTechLists = new String[][]{new String[]{IsoDep.class.getName()}, new String[]{MifareClassic.class.getName()}};//MifareClassic
        mIntent = this.getIntent();
        //启动线程关闭页面
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                if(!NfcTag.getInstance().getisflg())
                {
                    finish();
                }
            }
        },1000);
    }

    @Override
    public void onResume() {
        super.onResume();
        //-----------------非常关键,必要的哦,不能删除----------------
        nfcAdapter.enableForegroundDispatch(this, mPendingIntent, mFilters,
                mTechLists);
    }
    @Override
    protected void onStart() {
        super.onStart();
        if(!NfcTag.getInstance().getisflg())
        {
            finish();
        }
    }

    protected void  onPause () {
        super.onPause();
        finish();
    }
    @Override
    public void onNewIntent(Intent intent) {
        if(!NfcTag.getInstance().getisflg())
        {
            finish();
        }else {
            mIntent = intent;
            String action = intent.getAction();
            if (NfcAdapter.ACTION_TECH_DISCOVERED.equals(action)) {//当前的action
                Tag tag = mIntent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
                byte[] bytCardSN = tag.getId();
                String strCardSN = StringUtils.bytesToHexString(bytCardSN);
                NfcTag.getInstance().setId(strCardSN);
                finish();//读取完成关闭页面
            }
        }
    }


    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.e(TAG,"onDestroy");
    }


    /**
     * 注意:
     * super.onBackPressed()会自动调用finish()方法,关闭当前Activity.
     */
    @Override
    public void onBackPressed() {
        super.onBackPressed();
        finish();
    }


    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK)) {
         finish();
            return false;
        }else {
            return super.onKeyDown(keyCode, event);
        }
    }
}
就是找不到问题啊
技术咨询-特特 · 2022-6-23 13:25重点看下代码,开发给的建议
问题解决了吗
4
帖子
0
勋章
83
Y币
没有  解决不了   哎 你们这边有没有什么好办法啊 网上去找都说不能使用隐藏 需要使用透明来代替  但是透明我调用模块的时候 他覆盖页面造成页面没法去切换刷卡模式和账号登录模式
0
帖子
1
勋章
2418
Y币
你本地运行应该也会有问题吧
0
帖子
1
勋章
2418
Y币
就用透明的一像素的activity,读到卡片信息后立马关闭
4
帖子
0
勋章
83
Y币
模块开发编译出来没有问题,使用网站去编译就会出现闪退
JP1688 · 2022-6-27 18:52你本地运行应该也会有问题吧
4
帖子
0
勋章
83
Y币
使用透明activity是可以  但是透明activity没法点击页面内的按钮 我页面里有账号登录和刷卡登录的切换,然后内页里面有刷卡和其他业务按钮 而用透明activity也会造成内页出现不刷卡其他功能不能使用的问题
JP1688 · 2022-6-27 18:58就用透明的一像素的activity,读到卡片信息后立马关闭
4
帖子
0
勋章
83
Y币
有办法帮忙解决一下 或者说编译的时候怎么选择能回到以前的编译模式 因为这个之前都是好的 最近编译才发现这个问题 百度去查是因为现在不支持页面隐藏 页面隐藏会造成页面程序直接闪退 而不隐藏用透明又会遮挡住我页面的其他功能
技术咨询-特特 · 2022-6-23 13:25重点看下代码,开发给的建议
0
帖子
1
勋章
2418
Y币
只能使用透明的一像素的activity,读到卡片信息后立马finish掉,对你页面没有影响。nfc的目前只能这么做了
泰普森 · 2022-7-4 14:46有办法帮忙解决一下 或者说编译的时候怎么选择能回到以前的编译模式 因为这个之前都是好的 最近编译才发现这个问题 百度去查是因为现在不支持页面隐藏 页面隐藏会造成页面程序直接闪退 而不隐藏用透明又会遮挡住我页 ...
123下一页
您需要登录后才可以回帖 登录

本版积分规则