上一篇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();
}
}
}