RFID掃描APP--source1

上一篇blog貼出RFIDReader的效果圖,這裏貼出其重點部分代碼,以供學習。
1. ConnectActivity

/**
 * Created by boyangel on 2015/12/11.
 * @author icecreamco
 */
public class ConnectActivity extends AppCompatActivity{

    /*
     * 實例域
     */
    private static final String TAG = "ConnectActivity";        // log TAG

    private ProgressBar mProgressBar;                           // 連接時顯示
    private TextView mConnectModuText;                          // 連接時顯示的文字
    private LinearLayout mLinearLayout;                         // Button所在layout,控制是否顯示按鈕
    private Button mReconnectButton;                            // 重連按鈕
    private Button mExitButton;                                 // 退出按鈕
    private static UhfReader mReader;                           // UHF對象

    private Handler mHandler;                                   // UI線程的消息處理handler
    private Timer mTimer;                                       // 定時,其實是爲了顯示一下ProgressBar

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_connect);

        //初始化Setting參數,第一次啓動有效
        initiaParameters();

        //設置ActionBar
        Toolbar toolbar = (Toolbar) findViewById(R.id.connect_toolbar);
        setSupportActionBar(toolbar);

        //自動連接
        mProgressBar = (ProgressBar)findViewById(R.id.progress_bar);
        mConnectModuText = (TextView)findViewById(R.id.connect_modu_text);

        //初始化失敗處理
        mLinearLayout = (LinearLayout)findViewById(R.id.connect_liearlayout);
        mReconnectButton = (Button)findViewById(R.id.reconnect_button);
        mReconnectButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mLinearLayout.setVisibility(View.GONE);
                mProgressBar.setVisibility(View.VISIBLE);
                mConnectModuText.setText(R.string.connect_modula);
                //定時發送
                timerConnect();
            }
        });
        mExitButton = (Button)findViewById(R.id.exit_button);
        mExitButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        //消息處理
        mHandler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                // 連接掃描模塊,成功則進入mainactivity,否則顯示重連界面
                if(msg.what == 0) {
                    if (initiaModu()) {
                        Intent intent = new Intent(ConnectActivity.this, MainActivity.class);
                        startActivity(intent);
                        // 銷燬此activity
                        finish();
                    } else {
                        mProgressBar.setVisibility(View.INVISIBLE);
                        mConnectModuText.setText(R.string.connect_failed);
                        mLinearLayout.setVisibility(View.VISIBLE);
                    }
                }
            }
        };

        //定時
        mTimer = new Timer();
        timerConnect();
    }

    /*
     * 模塊初始化
     */
    private boolean initiaModu() {
        mReader = UhfReader.getInstance();
        if(mReader == null) {
            return false;
        }

        //休眠一下,估計是硬件初始化的需求
        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
            Log.e(TAG, "Thread sleep error");
            mReader = null;
            return false;
        }

        //獲取模塊功率參數
        int power = PreferenceManager.getDefaultSharedPreferences(this.getApplicationContext())
                .getInt(SettingActivity.POWER, 26);
        Log.i(TAG, "Get the power " + power);
        mReader.setOutputPower(power);

        //連接
        byte[] versionBytes = mReader.getFirmware();
        if(versionBytes == null) {
            mReader = null;
            return false;
        }
        String version = new String(versionBytes);
        Log.i(TAG, "version : " + version);
        return true;
    }

    /*
     * 返回Reader
     */
    public static UhfReader getReader() {
        return mReader;
    }

    /*
     * 定時重連,延時300ms
     */
    private void timerConnect() {
        mTimer.schedule(new TimerTask() {
            @Override
            public void run() {
                //初始化模塊信息發送
                Message msg = mHandler.obtainMessage();
                msg.what = 0;
                mHandler.sendMessage(msg);
            }
        }, 300);
    }

    /*
     * 初始化Setting參數,只在第一次啓動此app時生效
     */
    private void initiaParameters() {
        SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
        // FIRST爲第一次啓動的標誌,若是第一次則爲空,否則爲first
        if (sp.getString(SettingActivity.FIRST,"").equals("")) {
            sp.edit()
                    .putInt(SettingActivity.POWER, SettingActivity.MAXPOWER)
                    .putString(SettingActivity.URL, SettingActivity.DEFAULT_URL)
                    .putString(SettingActivity.VEHICLE_ID, SettingActivity.DEFAULT_VEHICLE_ID)
                    .putString(SettingActivity.VEHICLE_TYPE, SettingActivity.TYPE_CAR)
                    .putString(SettingActivity.ACTION, SettingActivity.ACTION_LOAD)
                    .putString(SettingActivity.FIRST, SettingActivity.FIRST)
                    .commit();
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章