主頁 > 移動端開發 > 為啥代碼精簡了無用的,陳述句就執行不起來

為啥代碼精簡了無用的,陳述句就執行不起來

2020-09-14 10:11:49 移動端開發

用的是智聯天地N5的掃描槍

原來的DEMO是這樣的

package com.juri.juriscanner;
import java.util.ArrayList;

import com.zltd.decoder.Constants; //呼叫sdk
import com.zltd.industry.ScannerManager; //這個也是sdk的
import com.juri.juriscanner.R;

//import android.annotation.SuppressLint;SoundUtils //這個是聲音介面
import android.app.Activity; //下面的是系統自帶的
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;
import android.os.Handler;  //訊息處理 Handler對像
import android.os.Message;
import android.widget.ArrayAdapter;

import androidx.annotation.NonNull;

public abstract class BaseActivity extends Activity implements  //調肜了iscannerstatuslisterner介面
        ScannerManager.IScannerStatusListener {
    protected static final int UPDATE_LIST = 4096; //4096
    protected static final int UPDATE_NUMBER = 4097; //4097

    protected ScannerManager mScannerManager;
    protected SoundUtils mSoundUtils;

    protected ArrayList<String> mBarcodeList = new ArrayList<String>(); //條碼串列串列
    protected ArrayAdapter<String> mListAdaper; //字串配接器

    protected int pressed = 0; //計數器,用來計算按鍵數
    protected int scanned = 0; //計數器,用來計算掃描數
    protected int decoderType = 0;


    //onCreate方法
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        mScannerManager = ScannerManager.getInstance(); //實體化
        decoderType = mScannerManager.getDecoderType();  //解碼型別
        mSoundUtils = SoundUtils.getInstance();//聲音物件
        mSoundUtils.init(this); //聲音初始化
        mListAdaper = new ArrayAdapter<String>(this, R.layout.list_item, mBarcodeList);
    }

    public void onResume() {
        super.onResume();
        //2.回傳后繼續代碼
        int res = mScannerManager.connectDecoderSRV(); //連接驅動
        mScannerManager.addScannerStatusListener(this);
        if (decoderType == Constants.DECODER_ONED_SCAN) {  //解碼型別
            if (!mScannerManager.getScannerEnable()) {
                new AlertDialog.Builder(this)
                        .setTitle(R.string.action_settings)
                        .setIcon(android.R.drawable.ic_dialog_info)
                        .setMessage(R.string.scan_message)
                        .setPositiveButton(R.string.dialog_ok, new OnClickListener() {
                            @Override
                            public void onClick(DialogInterface paramDialogInterface, int paramInt) {
                                closeSelf();
                            }
                        })
                        .setCancelable(false)
                        .show();
            }
        }
    }

    // 4.APP暫停代碼
    public void onPause() {
        mScannerManager.removeScannerStatusListener(this);
        mScannerManager.disconnectDecoderSRV(); //斷開連接
        super.onPause();
    }

    protected void closeSelf() {
        this.finish();
    }

    //更新UI,這里HANDLDER是因為安卓子執行緒不能更新UI,必須通過HANLDER方向
    //HANDLER接收訊息
    //@SuppressLint("HandlerLeak")
//    protected Handler mHandle = new Handler() {
////        public void handleMessage(Message msg) {
////            switch (msg.what) {
////                case UPDATE_LIST:
////                    scanned++; //次數增加
////                    mSoundUtils.success(); //播放聲音
////                    updateList((String) msg.obj); //添加資料到串列框
////                case UPDATE_NUMBER: //增加數量,顯示在前臺標簽
////                    updateCount();
////                    break;
////                default:
////                    break;
////            }
////        }
////    };

protected Handler mHandle=new Handler(new Handler.Callback() {
    @Override
    public boolean handleMessage(@NonNull Message msg) {
        switch (msg.what){
            case 4096:
                scanned++; //次數增加
                mSoundUtils.success();
                updateList((String) msg.obj); //添加資料到串列框
            case 4097:
                //updateCount();
                break;
             default:
                 break;
        }
        return false;
    }
});

    public abstract void updateCount();

    public abstract void updateList(String data);

    //清除訊息
    public void clear() {
        mBarcodeList.clear(); //清除串列
        mListAdaper.notifyDataSetChanged(); //配接器清空
        pressed = 0;
        scanned = 0;
        mHandle.sendEmptyMessage(4097); //發送資料
    }

    //3.結果改變,sdk事件
    @Override
    public void onScannerResultChanage(byte[] arg0) {
        String data = new String(arg0);
        Message msg = mHandle.obtainMessage(4096, data); //獲取訊息
        mHandle.sendMessage(msg);
    }

    //掃描狀態改變
    @Override
    public void onScannerStatusChanage(int arg0) {
        // TODO Auto-generated method stub

    }
}



package com.juri.juriscanner;

import com.zltd.industry.ScannerManager;  //呼叫sdk介面
import com.juri.juriscanner.R;

import android.content.Intent; //intent方法
import android.os.Bundle;
import android.view.KeyEvent; //鍵盤事件
import android.view.View;
import android.widget.Button; //下面這些都是控制元件
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.ListView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;

public class MainActivity extends BaseActivity {
    private boolean mIsScanKeyDown = false;  //初始化控制元件變數
    private ListView mListView;
    private TextView mTextView;
    private CheckBox mToneCheckBox;

    private RadioGroup mRadioGroup;
    private RadioButton mSingleButton;
    private RadioButton mContinuousButton;
    private RadioButton mKeyHoldButton;
    private Button mAutoTestButton;

    private Button mSingleScanButton;
    private Button mContinousScanButton;
    protected boolean inContinuousShoot = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mTextView = (TextView) findViewById(R.id.textView);
        mListView = (ListView) findViewById(R.id.list);
        mAutoTestButton = (Button) findViewById(R.id.button_auto_test);
        mToneCheckBox = (CheckBox) findViewById(R.id.checkBox_tone);
        mToneCheckBox.setChecked(mSoundUtils.getPlay());
        //通過這個按扭事件來設定聲音是否可用
        mToneCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                mSoundUtils.enablePlay(isChecked); //單選框是保證這個是否可用,如果不可用,就不播放聲音了
            }
        });
        mSingleButton = (RadioButton) findViewById(R.id.single_radioButton); //單掃按鍵
        mContinuousButton = (RadioButton) findViewById(R.id.continuous_radioButton); //連掃按鍵
        mKeyHoldButton = (RadioButton) findViewById(R.id.key_radioButton);
        mRadioGroup = (RadioGroup) findViewById(R.id.rg);

        //單選框的點擊事件
        mRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                switch (checkedId) {
                    case R.id.single_radioButton:
                        mScannerManager.setScanMode(ScannerManager.SCAN_SINGLE_MODE); //設定為單掃模式
                        break;
                    case R.id.continuous_radioButton: //多掃模式
                        mScannerManager.setScanMode(ScannerManager.SCAN_CONTINUOUS_MODE);
                        break;
                    case R.id.key_radioButton: //掛起模式
                        mScannerManager.setScanMode(ScannerManager.SCAN_KEY_HOLD_MODE);
                        break;
                    default:
                        break;
                }
            }
        });
        // mAutoCheckBox = (CheckBox) findViewById(R.id.checkBox_auto);
        // mAutoCheckBox.setChecked(mAutoScan);
        // mAutoCheckBox.setOnCheckedChangeListener(new
        // OnCheckedChangeListener() {
        // @Override
        // public void onCheckedChanged(CompoundButton buttonView, boolean
        // isChecked) {
        // mAutoScan = isChecked;
        // mHandle.sendEmptyMessage(AUTO_SCAN);
        // }
        // });

        mSingleScanButton = (Button) findViewById(R.id.single_button);
        mContinousScanButton = (Button) findViewById(R.id.continuous_button);

        mListView.setAdapter(mListAdaper);
    }

    //恢復狀態,用來恢復
    public void onResume() {
        super.onResume();
        switch (mScannerManager.getScanMode()) { //獲取 這個狀態,如果是連掃模式,那么單掃不可用,自動測驗可用
            case ScannerManager.SCAN_CONTINUOUS_MODE:
                mSingleScanButton.setEnabled(false);
                mContinuousButton.setChecked(true);
                mAutoTestButton.setEnabled(false);
                break;
            case ScannerManager.SCAN_KEY_HOLD_MODE: //如果是自動測驗,那么前面兩個不可用
                mContinousScanButton.setEnabled(false);
                mSingleScanButton.setEnabled(false);
                mKeyHoldButton.setChecked(true);
                break;
            case ScannerManager.SCAN_SINGLE_MODE: //單掃模式
            default:
                mContinousScanButton.setEnabled(false);
                mSingleButton.setChecked(true);
                break;
        }
    }

    /*
     * public boolean dispatchKeyEvent(KeyEvent event) { if(event.getKeyCode()
     * == KeyEvent.KEYCODE_BUTTON_A) {
     * mScannerManager.dispatchScanKeyEvent(event); return true; } return
     * super.dispatchKeyEvent(event);
     *
     * }
     */


    //這兩個按扭事件一個意思就是為了防止長按,設定了一個策略,如果長按,那么為false也就是不會執行
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        switch (event.getKeyCode())
        {
            case KeyEvent.KEYCODE_BUTTON_A: {
                if (!mIsScanKeyDown) { //如果非按下狀態,
                    pressed++;//按下計數器增加
                    mScanner

uj5u.com熱心網友回復:



package com.juri.juriscanner;

import com.zltd.industry.ScannerManager;  //呼叫sdk介面
import com.juri.juriscanner.R;

import android.content.Intent; //intent方法
import android.os.Bundle;
import android.view.KeyEvent; //鍵盤事件
import android.view.View;
import android.widget.Button; //下面這些都是控制元件
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.ListView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;

public class MainActivity extends BaseActivity {
    private boolean mIsScanKeyDown = false;  //初始化控制元件變數
    private ListView mListView;
    private TextView mTextView;
    private CheckBox mToneCheckBox;

    private RadioGroup mRadioGroup;
    private RadioButton mSingleButton;
    private RadioButton mContinuousButton;
    private RadioButton mKeyHoldButton;
    private Button mAutoTestButton;

    private Button mSingleScanButton;
    private Button mContinousScanButton;
    protected boolean inContinuousShoot = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mTextView = (TextView) findViewById(R.id.textView);
        mListView = (ListView) findViewById(R.id.list);
        mAutoTestButton = (Button) findViewById(R.id.button_auto_test);
        mToneCheckBox = (CheckBox) findViewById(R.id.checkBox_tone);
        mToneCheckBox.setChecked(mSoundUtils.getPlay());
        //通過這個按扭事件來設定聲音是否可用
        mToneCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                mSoundUtils.enablePlay(isChecked); //單選框是保證這個是否可用,如果不可用,就不播放聲音了
            }
        });
        mSingleButton = (RadioButton) findViewById(R.id.single_radioButton); //單掃按鍵
        mContinuousButton = (RadioButton) findViewById(R.id.continuous_radioButton); //連掃按鍵
        mKeyHoldButton = (RadioButton) findViewById(R.id.key_radioButton);
        mRadioGroup = (RadioGroup) findViewById(R.id.rg);

        //單選框的點擊事件
        mRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                switch (checkedId) {
                    case R.id.single_radioButton:
                        mScannerManager.setScanMode(ScannerManager.SCAN_SINGLE_MODE); //設定為單掃模式
                        break;
                    case R.id.continuous_radioButton: //多掃模式
                        mScannerManager.setScanMode(ScannerManager.SCAN_CONTINUOUS_MODE);
                        break;
                    case R.id.key_radioButton: //掛起模式
                        mScannerManager.setScanMode(ScannerManager.SCAN_KEY_HOLD_MODE);
                        break;
                    default:
                        break;
                }
            }
        });
        // mAutoCheckBox = (CheckBox) findViewById(R.id.checkBox_auto);
        // mAutoCheckBox.setChecked(mAutoScan);
        // mAutoCheckBox.setOnCheckedChangeListener(new
        // OnCheckedChangeListener() {
        // @Override
        // public void onCheckedChanged(CompoundButton buttonView, boolean
        // isChecked) {
        // mAutoScan = isChecked;
        // mHandle.sendEmptyMessage(AUTO_SCAN);
        // }
        // });

        mSingleScanButton = (Button) findViewById(R.id.single_button);
        mContinousScanButton = (Button) findViewById(R.id.continuous_button);

        mListView.setAdapter(mListAdaper);
    }

    //恢復狀態,用來恢復
    public void onResume() {
        super.onResume();
        switch (mScannerManager.getScanMode()) { //獲取 這個狀態,如果是連掃模式,那么單掃不可用,自動測驗可用
            case ScannerManager.SCAN_CONTINUOUS_MODE:
                mSingleScanButton.setEnabled(false);
                mContinuousButton.setChecked(true);
                mAutoTestButton.setEnabled(false);
                break;
            case ScannerManager.SCAN_KEY_HOLD_MODE: //如果是自動測驗,那么前面兩個不可用
                mContinousScanButton.setEnabled(false);
                mSingleScanButton.setEnabled(false);
                mKeyHoldButton.setChecked(true);
                break;
            case ScannerManager.SCAN_SINGLE_MODE: //單掃模式
            default:
                mContinousScanButton.setEnabled(false);
                mSingleButton.setChecked(true);
                break;
        }
    }

    /*
     * public boolean dispatchKeyEvent(KeyEvent event) { if(event.getKeyCode()
     * == KeyEvent.KEYCODE_BUTTON_A) {
     * mScannerManager.dispatchScanKeyEvent(event); return true; } return
     * super.dispatchKeyEvent(event);
     *
     * }
     */


    //這兩個按扭事件一個意思就是為了防止長按,設定了一個策略,如果長按,那么為false也就是不會執行
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        switch (event.getKeyCode())
        {
            case KeyEvent.KEYCODE_BUTTON_A: {
                if (!mIsScanKeyDown) { //如果非按下狀態,
                    pressed++;//按下計數器增加
                    mScannerManager.dispatchScanKeyEvent(event);//這個才是主要事件,呼叫sdk方法,觸發掃描SDK掃描事件
                    // mScannerManager.triggerLevel(ScannerManager.LOW_LEVEL);

                    mHandle.sendEmptyMessage(4097); //添加資料,添加資料的IP為4097,意思就是升級記錄條數
                    mIsScanKeyDown = true; //設定為真,防止連續按
                }
                return true;

            }
        }
        return super.onKeyDown(keyCode, event);
    }

    @Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        switch (event.getKeyCode())
        {
            case KeyEvent.KEYCODE_BUTTON_A: {
                if (mIsScanKeyDown) {  //觸發按下彈起事件
                    mIsScanKeyDown = false;
                    mScannerManager.dispatchScanKeyEvent(event);
                    // mScannerManager.triggerLevel(ScannerManager.HIGH_LEVEL);
                }
                return true;
            }
        }
        return super.onKeyUp(keyCode, event);
    }

    public void onClear(View view) {
        clear();
    }


    //啟動自動測驗,跳到新視窗
    public void onAutoTest(View view) {
        Intent intent = new Intent();
        intent.setClassName("com.zltd.scantest", "com.zltd.scantest.AutoTestActivity");
        startActivity(intent);
    }

    //計數器顯示在文本標簽
    public void updateCount() {
        mTextView.setText("Scan: " + pressed + "times\nResult: " + scanned + "times");
    }

    //添加文本的方法
    @Override
    public void updateList(String data) {
        //mBarcodeList.add(0, data);
        //mListAdaper.notifyDataSetChanged();
         mTextView.setText(data);
    }

    public void singleShootOnClick(View view) {
        mScannerManager.singleScan();
    }


    //連掃事件
    public void continuousShootOnClick(View view) {
        if(!inContinuousShoot){
            inContinuousShoot = true;
            mScannerManager.startContinuousScan();
        } else {
            inContinuousShoot = false;
            mScannerManager.stopContinuousScan();
        }
    }

}

uj5u.com熱心網友回復:

/**
 * Project Name:YTOInfield File Name:SoundManager.java Package
 * Name:cn.net.yto.infield.biz Date:2013-3-7 am 10:10:13 Copyright (c) 2013,
 * zhiliantiandi All Rights Reserved.
 */

package com.juri.juriscanner;

import com.juri.juriscanner.R;

import android.content.Context;  //背景關系
import android.media.AudioManager;
import android.media.SoundPool;

/**
 * ClassName:SoundManager <br/>
 * Date: 2013-3-7 am 10:10:13 <br/>
 *
 * @author Liliang
 * @version
 * @since JDK 1.6
 * @see
 */
//加了final的話,這個類無法繼承的
public final class SoundUtils {

    //定義聲音的三種狀態,成功為0,警告為1,查詢為2
    public static final int SOUND_TYPE_SUCCESS = 0; //靜態變數,這樣就保證了只有一份
    public static final int SOUND_TYPE_WARNING = 1;
    public static final int SOUND_TYPE_QUERY = 2;

    private static SoundUtils sManager; //實體本身,因為這個類不打算繼承,那么只有只有通過實體化來獵取
    private float mStreamVolume = 0.1f;
    private Context mContext; //背景關系選單

    private int mWarningId = R.raw.warning; //這里是資源ID
    private int mSuccessId = R.raw.success;
    private int mQueryId = R.raw.query;

    private boolean isPlay = true; //默認為正在播放

    //構造方法
    private SoundUtils() {

    }

    //初始化,他這個奇怪的在于,寫在里面了,原因是因為不想繼承,只有這個辦法,實體化物件
    public static SoundUtils getInstance() {
        if (sManager == null) {
            sManager = new SoundUtils();
        }

        return sManager;
    }

    //初始化
    public void init(Context context) {
        if (mContext == null || mSoundPool == null) {
            mContext = context;
            loadSoundResources(context);
        }
    }

    //初始化方法
    public void init(Context context, int warningId, int successId, int queryId) {
        if (mContext == null || mSoundPool == null) {
            mContext = context;
            mWarningId = warningId;
            mSuccessId = successId;
            mQueryId = queryId;
            loadSoundResources(context);
        }
    }

    //是否可用,默認是可用的
    public void enablePlay(boolean enable) {
        isPlay = enable;  //賦值
    }

    //獲取 狀態
    public boolean getPlay() {
        return isPlay;
    }

    /**
     * playSound:Play sound for scan. <br/>
     *
     * @author Liliang
     * @param soundType One of {@link #SOUND_TYPE_SUCCESS},
     *            {@link #SOUND_TYPE_WARNING}, or {@link #SOUND_TYPE_QUERY}
     * @since JDK 1.6
     */

    //播放聲音,引數為型別,不同的聲音種類
    public void playSound(int soundType) {
        if (!isPlay)
            return; //如果不允許播,那么直接回傳
        int soundResId = mSoundSuccessId; //默認是成功的
        switch (soundType) {
            case SOUND_TYPE_SUCCESS:
                soundResId = mSoundSuccessId;
                break;

            case SOUND_TYPE_WARNING:
                soundResId = mSoundWarningId;
                break;

            case SOUND_TYPE_QUERY:
                soundResId = mSoundQueryId;
                break;

            default:
                break;
        }

        mSoundPool.play(soundResId, getVolume(), getVolume(), 1, 0, 1f);
    }

    //播放其他的聲音
    public void playOther(int resourceId) {
        if (!isPlay)
            return;
        int id = mSoundPool.load(mContext, resourceId, 1);
        mSoundPool.play(id, getVolume(), getVolume(), 1, 0, 1f);
    }

    //播放警告
    public void warn() {
        if (!isPlay)
            return;
        mSoundPool.play(mSoundWarningId, getVolume(), getVolume(), 1, 0, 1f);
    }

    //左右分開
    public void warn(float leftVolume, float rightVolume) {
        if (!isPlay)
            return;
        mSoundPool
                .play(mSoundWarningId, leftVolume, rightVolume, 1, 0, 1f);
    }

    //播放正確的
    public void success() {
        if (!isPlay)
            return;
        mSoundPool
                .play(mSoundSuccessId, getVolume(), getVolume(), 1, 0, 1f);
    }

    //正確的左右
    public void success(float leftVolume, float rightVolume) {
        if (!isPlay)
            return;
        mSoundPool
                .play(mSoundSuccessId, leftVolume, rightVolume, 1, 0, 1f);
    }

    public void query() {
        if (!isPlay)
            return;
        mSoundPool.play(mSoundQueryId, getVolume(), getVolume(), 1, 0, 1f);
    }

    public void query(float leftVolume, float rightVolume) {
        if (!isPlay)
            return;
        mSoundPool.play(mSoundQueryId, leftVolume, rightVolume, 1, 0, 1f);
    }

    //聲音大小
    private float getVolume() {
        return 0.8f;
    }

    private void loadSoundResources(Context context) {
        release();
        if (mSoundPool == null) {
            mSoundPool = new SoundPool(3, AudioManager.STREAM_MUSIC, 0);
            mSoundWarningId = mSoundPool.load(context, mWarningId, 1);
            mSoundSuccessId = mSoundPool.load(context, mSuccessId, 1);
            mSoundQueryId = mSoundPool.load(context, mQueryId, 1);
        }
    }

    //關閉資源,停止播放
    public void release() {
        if (mSoundPool != null) {
            mSoundPool.release();
        }
        mSoundPool = null;
    }

    //定義三個自定義物件,用來播放聲音
    private SoundPool mSoundPool;
    private int mSoundWarningId;
    private int mSoundSuccessId;
    private int mSoundQueryId;

}



我簡單的想測驗下

package com.juri.juricode;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

//下面代碼為段濤于2020年5月6日手工撰寫,今天完工,做個最好的

import android.os.Handler;
import android.os.Message;
import android.view.KeyEvent;
import android.widget.TextView;
import android.widget.EditText;
import android.widget.ListView;

//匯入支持庫
import com.zltd.decoder.Constants;
import com.zltd.decoder.DecoderManager;
import com.zltd.industry.ScannerManager;


//呼叫SDK介面
public class MainActivity extends AppCompatActivity implements ScannerManager.IScannerStatusListener {

    //定義幾個全域變數
    ScannerManager mScannerManager;
    TextView mTV;
    private static final int UPDATE_LIST = 4096;
    private static final int UPDATE_NUMBER = 4097;
    public boolean isScankeyDown = false; //默認是彈起的

    //定義一個Handler物件用來更新UI
    protected Handler mHandler = new Handler(new Handler.Callback() {
        @Override
        public boolean handleMessage(@NonNull Message msg) {
            switch (msg.what) {
                case UPDATE_LIST:
                    mTV.setText((String) msg.obj);
                default:
                    break;
            }


            return false;
        }
    });

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mScannerManager = ScannerManager.getInstance();//初始化實體
        mTV = findViewById(R.id.mTV);

    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        switch (event.getKeyCode()) {
            case KeyEvent.KEYCODE_BUTTON_A:
                if (!isScankeyDown) {
                    mScannerManager.dispatchScanKeyEvent(event);
                    isScankeyDown = true;  //如果不是是按下狀態,那么設為按下去的
                }
                return true; //回傳為真,就是彈起來的意思
        }
        return super.onKeyDown(keyCode, event);
    }

    @Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        switch (event.getKeyCode()) {
            case KeyEvent.KEYCODE_BUTTON_A:
                if (isScankeyDown) {
                    isScankeyDown = false;  //如果是按下狀態,那么設為彈起來的
                    mScannerManager.dispatchScanKeyEvent(event);
                }
                return true; //回傳為真,就是彈起來的意思
        }
        return super.onKeyUp(keyCode, event);
    }

    @Override
    public void onScannerStatusChanage(int i) {

    }

    @Override
    public void onScannerResultChanage(byte[] arg0) {
        String data = new String(arg0);
        Message msg = mHandler.obtainMessage(UPDATE_LIST, data); //接收訊息,發送訊息
        mHandler.sendMessage(msg);
    }
}


為啥不起作用了

uj5u.com熱心網友回復:

你這長篇的代碼,常人是難以閱讀的。

uj5u.com熱心網友回復:

還不如直接貼例外,這咋看

uj5u.com熱心網友回復:

大哥,直接貼錯誤吧,可以加log除錯。
Log.d("");
你這個貼上來的代碼太長長長了,恐怕只有編譯器才能看出錯誤。

uj5u.com熱心網友回復:

是呵,能縮小問題代碼的范圍,興許大家還能抓住重點,找到問題。這么長段代碼review,恐怕難以耐心、聚焦。

uj5u.com熱心網友回復:

哈哈,感覺像是在看高中英語的閱讀理解,討厭那玩意。

uj5u.com熱心網友回復:

代碼略長啊。。。

uj5u.com熱心網友回復:

智聯的代碼,有關輸入按鍵部分的處理你看懂了么?恐怕你的代碼有關消除長按輸入部分有問題,把正常輸入屏蔽了。你再仔細考慮考慮。

uj5u.com熱心網友回復:

 

我看一篇帖子 最多 30秒 

uj5u.com熱心網友回復:

參考 11 樓 韓曙亮 的回復:
 

我看一篇帖子 最多 30秒 

膜拜大神

uj5u.com熱心網友回復:

試著不要一下子精簡那么多,或者就能明白是哪里搞錯了

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/33743.html

標籤:Android

上一篇:swift函式求助

下一篇:關于Android UsbCamera HAL 實作的問題

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【從零開始擼一個App】Dagger2

    Dagger2是一個IOC框架,一般用于Android平臺,第一次接觸的朋友,一定會被搞得暈頭轉向。它延續了Java平臺Spring框架代碼碎片化,注解滿天飛的傳統。嘗試將各處代碼片段串聯起來,理清思緒,真不是件容易的事。更不用說還有各版本細微的差別。 與Spring不同的是,Spring是通過反射 ......

    uj5u.com 2020-09-10 06:57:59 more
  • Flutter Weekly Issue 66

    新聞 Flutter 季度調研結果分享 教程 Flutter+FaaS一體化任務編排的思考與設計 詳解Dart中如何通過注解生成代碼 GitHub 用對了嗎?Flutter 團隊分享如何管理大型開源專案 插件 flutter-bubble-tab-indicator A Flutter librar ......

    uj5u.com 2020-09-10 06:58:52 more
  • Proguard 常用規則

    介紹 Proguard 入口,如何查看輸出,如何使用 keep 設定入口以及使用實體,如何配置壓縮,混淆,校驗等規則。

    ......

    uj5u.com 2020-09-10 06:59:00 more
  • Android 開發技術周報 Issue#292

    新聞 Android即將獲得類AirDrop功能:可向附近設備快速分享檔案 谷歌為安卓檔案管理應用引入可安全隱藏資料的Safe Folder功能 Android TV新主界面將顯示電影、電視節目和應用推薦內容 泄露的Android檔案暗示了傳說中的谷歌Pixel 5a與折疊屏新機 谷歌發布Andro ......

    uj5u.com 2020-09-10 07:00:37 more
  • AutoFitTextureView Error inflating class

    報錯: Binary XML file line #0: Binary XML file line #0: Error inflating class xxx.AutoFitTextureView 解決: <com.example.testy2.AutoFitTextureView android: ......

    uj5u.com 2020-09-10 07:00:41 more
  • 根據Uri,Cursor沒有獲取到對應的屬性

    Android: 背景:呼叫攝像頭,拍攝視頻,指定保存的地址,但是回傳的Cursor檔案,只有名稱和大小的屬性,沒有其他諸如時長,連ID屬性都沒有 使用 cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATIO ......

    uj5u.com 2020-09-10 07:00:44 more
  • Android連載29-持久化技術

    一、持久化技術 我們平時所使用的APP產生的資料,在記憶體中都是瞬時的,會隨著斷電、關機等丟失資料,因此android系統采用了持久化技術,用于存盤這些“瞬時”資料 持久化技術包括:檔案存盤、SharedPreference存盤以及資料庫存盤,還有更復雜的SD卡記憶體儲。 二、檔案存盤 最基本存盤方式, ......

    uj5u.com 2020-09-10 07:00:47 more
  • Android Camera2Video整合到自己專案里

    背景: Android專案里呼叫攝像頭拍攝視頻,原本使用的 MediaStore.ACTION_VIDEO_CAPTURE, 后來因專案需要,改成了camera2 1.Camera2Video 官方demo有點問題,下載后,不能直接整合到專案 問題1.多次拍攝視頻崩潰 問題2.雙擊record按鈕, ......

    uj5u.com 2020-09-10 07:00:50 more
  • Android 開發技術周報 Issue#293

    新聞 谷歌為Android TV開發者提供多種新功能 Android 11將自動填表功能整合到鍵盤輸入建議中 谷歌宣布Android Auto即將支持更多的導航和數字停車應用 谷歌Pixel 5只有XL版本 搭載驍龍765G且將比Pixel 4更便宜 [圖]Wear OS將迎來重磅更新:應用啟動時間 ......

    uj5u.com 2020-09-10 07:01:38 more
  • 海豚星空掃碼投屏 Android 接收端 SDK 集成 六步驟

    掃碼投屏,開放網路,獨占設備,不需要額外下載軟體,微信掃碼,發現設備。支持標準DLNA協議,支持倍速播放。視頻,音頻,圖片投屏。好點意思。還支持自定義基于 DLNA 擴展的操作動作。好像要收費,沒體驗。 這里簡單記錄一下集成程序。 一 跟目錄的build.gradle添加私有mevan倉庫 mave ......

    uj5u.com 2020-09-10 07:01:43 more
最新发布
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:40:31 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:40:11 more
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:39:36 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:39:13 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:16:23 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:16:15 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:15:46 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:14:53 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:14:08 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:08:34 more