日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

从头开始敲代码之《从BaseApplication/Activity开始(二)》

發布時間:2023/12/31 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 从头开始敲代码之《从BaseApplication/Activity开始(二)》 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

轉載請注明出處:王亟亟的大牛之路

愿意花時間寫東西不容易,人啊,都是有血有肉有思想的,借鑒是學習,純Copy就不好了,謝謝
部分資料參考于網上。

《贈梁任父同年》黃遵憲 ?

寸寸河山寸寸金,侉離分裂力誰任?
杜鵑再拜憂天淚,精衛無窮填海心。

上一篇我們講到了簡易的封裝 對我們提高效率的好處,這一篇繼續寫下去,如果第一篇沒看過的希望能看下,方便理解。鏈接:亟亟在安卓的進階實例

這一次我們利用最基本的Activity生命周期中的方法,來對用戶藍牙進行識別操作,并在過程中考慮用戶層面的操作理解,順便補充下安卓手機的藍牙知識。

什么是藍牙?
一種無線技術標準,可實現固定設備、移動設備和樓宇個人域網之間的短距離數據交換(使用2.4—2.485GHz的ISM波段的UHF無線電波)。
白話:安卓對各個版本的藍牙其實都有一定的支持,從1.5的Cupcake就支持了藍牙耳機,但是自從安卓4.3版本之后Google對藍牙4.0的支持,又進一步的提升,所以對4.3前后的適配又成了我們的工作(現在已經普遍以5.0為開發環境低版本的手機已經不多,工作量其實已經不大了)

OK,簡單介紹完了,開始今天的代碼

寫一個工具類BluetoothMgr,把藍牙一些相關的操作,放在里面

/**?*?Created?by?Ezreal?on?2015/9/14.?*/public?class?BluetoothMgr?{private?static?BluetoothMgr?oneInstance?=?null;public?static?BluetoothAdapter?mBluetoothAdapter?=?null;public?boolean?available?=?false;private?static?List<BluetoothDevice>?devList?=?new?ArrayList<BluetoothDevice>();private?BluetoothMgr()?{?}@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)private?BluetoothMgr(Context?context)?{int?sdkInt?=?Build.VERSION.SDK_INT;if?(sdkInt?<=?Build.VERSION_CODES.JELLY_BEAN_MR1)?{mBluetoothAdapter?=?BluetoothAdapter.getDefaultAdapter();}?else?{BluetoothManager?manager?=?(BluetoothManager)?context.getSystemService(Context.BLUETOOTH_SERVICE);mBluetoothAdapter?=?manager.getAdapter();}available?=?(null?!=?mBluetoothAdapter);}//判斷BluetoothMgr是否可用public?boolean?available()?{return?available;}//獲得實例public?static?BluetoothMgr?getInstance(Context?context)?{if?(null?==?oneInstance)?{oneInstance?=?new?BluetoothMgr(context);}return?oneInstance;}//搜索設備public?static?boolean?startDiscovery(){if?(null?==?mBluetoothAdapter)?{return?false;}if?(!mBluetoothAdapter.isEnabled())?{mBluetoothAdapter.enable();while?(!mBluetoothAdapter.isEnabled())?{try?{Thread.sleep(1000);}?catch?(InterruptedException?e)?{e.printStackTrace();}}}if?(mBluetoothAdapter.isDiscovering())?{return?true;}return?mBluetoothAdapter.startDiscovery();}//取消搜索public?static?boolean?cancelDiscovery()?{if?(mBluetoothAdapter?==?null)?{return?false;}if?(mBluetoothAdapter.isDiscovering()){return?mBluetoothAdapter.cancelDiscovery();}return?false;}//添加設備public?static?void?addOne(BluetoothDevice?device)?{if?(null?==?device)?{return;}if?(devList.contains(device))?{return;}devList.add(device);}//刪除設備public?static?void?deleteOne(String?mac)?{if?(null?==?mac?||?mac.length()==0)?{return;}for?(int?i?=?0;?i?<?devList.size();?++i)?{BluetoothDevice?device?=?devList.get(i);if?(device.getAddress().equalsIgnoreCase(mac))?{devList.remove(i);break;}}}//清空集合public?static?void?clearAllDevices()?{devList.clear();}public?static?BluetoothDevice?findOne(int?pos)?{if?(pos?<?0?||?pos?>=?devList.size())?{return?null;}return?devList.get(pos);}public?static?List<BluetoothDevice>?getDevList()?{return?devList;}public?static?boolean?isDevListEmpty()?{return?(null?==?devList?||?devList.isEmpty());}//獲取狀態public?static?int?getState(){if(mBluetoothAdapter!=null){LogUtils.d("BluetoothMgr","mBluetoothAdapter.getState()"+mBluetoothAdapter.getState());return?mBluetoothAdapter.getState();}else{return?-1;}} }

分析:對藍牙的一些基本方法進行了封裝,以及版本的判斷,這邊在例舉下藍牙相關的一些具體代碼的內容
(這部分網上資料還算有,也可以找找)

在安卓要使用藍牙,先要授權

????<uses-permission?android:name="android.permission.BLUETOOTH"?/><uses-permission?android:name="android.permission.BLUETOOTH_ADMIN"?/>

不然你項目一運行就是異常。

要使用藍牙必須聲明一個BluetoothAdapter

在4.3之前
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();獲取系統默認藍牙。

4.3之后
BluetoothManager manager = (BluetoothManager) context.getSystemService(Context.BLUETOOTH_SERVICE);
mBluetoothAdapter = manager.getAdapter();

列舉一些常用的方法

disable()關閉藍牙

enable()打開藍牙(用戶將不會收到提示)

下面是另一種打開藍牙的方式,但是會提醒用戶手動去打開

Intent enabler=new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enabler,reCode);//同startActivity(enabler);

cancelDiscovery() 取消搜索設備

startDiscovery() 開始搜索設備

getAddress()獲取本地藍牙地址

getName()獲取本地藍牙名稱

getRemoteDevice(Stringaddress)根據藍牙地址獲取遠程藍牙設備

getState()獲取本地藍牙適配器當前狀態

isDiscovering()判斷當前是否正在查找設備,是返回true

isEnabled()判斷藍牙是否打開,已打開返回true,否則,返回false

再列舉下藍牙的狀態值
BluetoothAdapter STATE 狀態值

??????????int?STATE_OFF????????藍牙已經關閉int?STATE_ON????????藍牙已經打開int?STATE_TURNING_OFF??????藍牙處于關閉過程中?,關閉ingint?STATE_TURNING_ON????????藍牙處于打開過程中?,打開ing

BluetoothAdapter SCAN_MOD狀態值=掃描狀態

可以掃描其他設備的,當然它同時能被其他藍牙設備掃碼。

?????int??SCAN_MODE_CONNECTABLE?????????表明該藍牙可以掃描其他藍牙設備int??SCAN_MODE_CONNECTABLE_DISCOVERABLE?????可以掃描其他藍牙設備,并且可以被其他藍牙設備掃描到。int??SCAN_MODE_NONE?:?該藍牙不能掃描以及被掃描。

更多資料可參考BluetoothAdapter[藍牙]

鋪墊做的差不多了,我們開始今天的代碼。

需求:我有一個Activity,我需要進入他的時候讓用戶開啟手機藍牙,然后對我們的另外一個藍牙硬件進行操作,如果用戶不愿意去開,那就停留在原有界面,如果用戶去開藍牙了并且成功了那么就進入下一步操作,如果沒開成功,那么繼續提示。

包結構:

代碼的基類都是在我們之前的Demo中繼續添加的,更有延續性。

直接貼 MainActivity

public?class?MainActivity?extends?BaseActivity?implements?View.OnClickListener{Button?button;private?MyPromptDlg?btNotOpenDlg?=?null;BluetoothMgr?bleMgr;@Overrideprotected?void?findById()?{button=(Button)findViewById(R.id.button);bleMgr=BluetoothMgr.getInstance(this);}@Overrideprotected?void?setListener()?{button.setOnClickListener(this);}@Overrideprotected?void?logic()?{}@Overrideprotected?int?getLayout()?{return?R.layout.activity_main;}@Overridepublic?void?onClick(View?v)?{if?(v.getId()==R.id.button){Toast.makeText(MainActivity.this,"NFC是否可用???"+NFCisAvailable(),Toast.LENGTH_SHORT).show();openBlueToothSetting();}}@Overrideprotected?void?onResume()?{super.onResume();LogUtils.d("------>onResume");if(bleMgr.isEnabled()){Toast.makeText(MainActivity.this,"藍牙已經打開",Toast.LENGTH_SHORT).show();}else{OpenBlueTooth();}}//打開藍牙private?void?OpenBlueTooth(){//判斷Activity的狀態if?(this.isFinishing())?{return;}if?(null?==?btNotOpenDlg)?{MyPromptDlg.Builder?builder?=?new?MyPromptDlg.Builder(this);builder.setTitle(res.getString(R.string.prompt_dlg_title)).setText(res.getString(R.string.bt_check_message)).setPositiveButton(res.getString(R.string.common_ok),new?DialogInterface.OnClickListener()?{@Overridepublic?void?onClick(DialogInterface?dialog,int?which)?{dialog.dismiss();openBlueToothSetting();}}).setNegativeButton(res.getString(R.string.common_cancel),new?DialogInterface.OnClickListener()?{@Overridepublic?void?onClick(DialogInterface?dialog,int?which)?{dialog.dismiss();//finish();}});btNotOpenDlg?=?builder.create();btNotOpenDlg.setCancelable(false);btNotOpenDlg.setCanceledOnTouchOutside(false);}if?(!btNotOpenDlg.isShowing())?{btNotOpenDlg.show();}}//打開系統藍牙設置菜單private?void?openBlueToothSetting(){Intent?intent?=?new?Intent(Settings.ACTION_BLUETOOTH_SETTINGS);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);startActivity(intent);} }

分析:
首先我們在我們的onCreate方法中初始化一個BluetoothMgr并且讓其獲得了系統藍牙的實例(包中的BluetoothMgr是一個Demo版的,具體更多的通用方法封裝在JAR包中了)

用戶進入App 依次調用onCreate–onStart–onResume–Activity進入運行狀態。
我們在onCreate時并沒有對用戶的藍牙狀態進行判斷,而是在onResume方法中判斷,這是為什么?看下圖

因為onResume會多次調用,而onCreate在不被回收過或者onStop的情況下永遠就調用一次,我們需要每一次用戶焦點在我們App中的時候都去判斷藍牙的狀態,那就是為什么我們要這么做的原因。

為了提高我們App的友好度,在判斷用戶沒有開啟藍牙的時候,我們彈出一個Dialog提示用戶要不要去開藍牙,如圖

如果用戶點擊取消我們會回到界面,但是不會調用onResume方法,不然我們的用戶 就一直在那里選啊選了,不符合邏輯。
點擊是,調用openBlueToothSetting()方法去手動開啟,當然如果你覺得你需要強勢一些可以用enable()方法,直接就開啟了,但是要記得做短暫的等待,因為開啟藍牙會有一定的異步操作。
因為你代碼調用開啟藍牙所以用戶回到界面之后不會再判斷時候開啟藍牙,也符合我們的業務需求。

當用戶點擊確定的時候我們開啟了藍牙設置菜單界面(系統的)

回來之后又調用了onResume,彈出了我們的吐司

OK我們的業務就完成了,還有別的實現方法么?有!!

可以用Service,開一個現成一直在那里判斷也能達到效果 但是不是最理想的實現方式

還有是BroadcastReceiver 去監聽手機藍牙的變化,實現如下

BroadcastReceiver?bluetoothState?=?new?BroadcastReceiver()?{public?void?onReceive(Context?context,?Intent?intent)?{String?stateExtra?=?BluetoothAdapter.EXTRA_STATE;???????int?state?=?intent.getIntExtra(stateExtra,?-1);???????switch(state)?{case?BluetoothAdapter.STATE_TURNING_ON:break;case?BluetoothAdapter.STATE_ON:break;case?BluetoothAdapter.STATE_TURNING_OFF:break;case?BluetoothAdapter.STATE_OFF:break;}} }registerReceiver(bluetoothState,new?IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED));

記得注銷哦!!

午休午休!!源碼地址:http://yunpan.cn/cmCaaRkzc2UV6 訪問密碼 4894

版權聲明:本文為博主原創文章,未經博主允許不得轉載。

轉載于:https://my.oschina.net/ddwhan0123/blog/506800

總結

以上是生活随笔為你收集整理的从头开始敲代码之《从BaseApplication/Activity开始(二)》的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国内精品久久久久久久久久 | 国产精品夜夜爽 | 重口味av| 一区免费观看 | 一女双乳被两男吸视频 | 丁香婷婷一区二区三区 | 91日日夜夜 | 2022天天操| 久久8| 久久性| 午夜av免费看 | 亚洲av无码国产精品麻豆天美 | 日韩在线播放av | 激情av网 | 91精品国产91久久久久久 | 一级黄色录像免费观看 | 91黄址| 国产成人在线观看免费 | 激情宗合网 | 欧美丰满老妇性猛交 | 久久九九久久九九 | 亚洲无吗在线观看 | 日本大尺度做爰呻吟 | www网站在线观看 | 天天干天天干 | www,久久久| 樱花视频在线观看 | 91桃色网站 | 国产拍拍拍拍拍拍拍拍拍拍拍拍拍 | 四虎一区二区 | 亚洲成人一区在线 | 国产成人精品综合久久久久99 | 翔田千里在线播放 | 少妇性生活视频 | 久久午夜精品人妻一区二区三区 | 国产精品久久精品三级 | 天天躁日日躁狠狠很躁 | 日韩午夜小视频 | 十八岁世界在线观看高清免费韩剧 | 97无码精品人妻 | 成人一区二区在线 | 亚洲成人av电影 | 日本毛片网站 | www.国产精品 | 四虎影酷 | 国产网址在线 | 国产成人三级在线观看 | 日韩成人av在线播放 | av天堂永久资源网 | 欧美xxxxx牲另类人与 | 一区二区三区在线看 | 亚洲自拍天堂 | 国产三级三级三级三级三级 | 欧美精品免费视频 | 日韩一区二区三区四区 | 欧美在线专区 | 精品综合久久久久 | 亚洲巨乳| 蜜桃视频在线观看网站 | 日本黄色美女视频 | 久久日视频 | 日本在线不卡一区二区三区 | 在线播放91灌醉迷j高跟美女 | h片免费在线观看 | 超碰黄色| 九九影院最新理论片 | 成人免费在线网址 | 婷婷综合一区 | 污污av| 无码日韩人妻精品久久蜜桃 | 一级欧美一级日韩 | 精品国产一区在线观看 | 久久露脸国语精品国产91 | 国产在线观看第一页 | 国产一级二级在线 | 日韩69| 中文在线а√在线8 | 亚洲女人天堂网 | 公交顶臀绿裙妇女配视频 | 女人av | 国产伦精品一区二区三区免费 | 国产免费网址 | 麻豆视频免费网站 | 亚洲国产精品久久久久爰性色 | 91视频在线观看 | 欧美理论在线观看 | 亚洲精品字幕在线 | 亚洲三区在线观看无套内射 | 青娱乐国产视频 | 午夜精品小视频 | 浪漫樱花在线观看高清动漫 | 波多野42部无码喷潮在线 | 三级欧美韩日大片在线看 | 国产伦精品一区二区三区视频网站 | 黄色免费网站在线看 | 黄色一级片在线免费观看 | 色婷婷av一区二区三区大白胸 | 成人五区 | 亚洲精品在线一区二区 |