Android狀態(tài)欄禁用時(shí)川背,自動(dòng)接收藍(lán)牙文件以及顯示多文件傳輸進(jìn)度條

首先压彭,android原生的藍(lán)牙接收流程是,在有文件從其他設(shè)備傳過來時(shí)渗常,會(huì)彈出藍(lán)牙文件接收的缺人框且默認(rèn)是以notification的形式顯示在狀態(tài)欄壮不,當(dāng)用戶點(diǎn)擊之后才會(huì)彈出一個(gè)dialog。那么當(dāng)狀態(tài)欄被禁用時(shí)皱碘,如何實(shí)現(xiàn)文件接受全程不需用戶點(diǎn)擊而自動(dòng)接收呢询一?

第一個(gè)問題:

如何不讓用戶點(diǎn)擊狀態(tài)欄直接彈確認(rèn)的dialog。

在BluetoothOppNotification.java的updateIncomingFileConfirmNotification()方法中會(huì)對(duì)接受到來的文件進(jìn)行一定的處理同時(shí)會(huì)構(gòu)造一個(gè)Notification癌椿,來顯示接受和拒絕的信息健蕊,那么解決的思路就在這里。

 private void updateIncomingFileConfirmNotification() {

 //省略若干… 

 Intent intent = new Intent(Constants.ACTION_INCOMING_FILE_CONFIRM);//這句比較關(guān)鍵踢俄,傳遞一個(gè)action到BluetoothOppReceiver

 intent.setClassName(Constants.THIS_PACKAGE_NAME, BluetoothOppReceiver.class.getName());

 intent.setDataAndNormalize(contentUri);

intent構(gòu)造了之后在這里并沒有發(fā)送廣播出去缩功,而是在下面構(gòu)造notification之后,點(diǎn)擊時(shí)才將廣播發(fā)送出去都办,所以問題的解決點(diǎn)就在這里嫡锌。如果不需要用戶點(diǎn)擊狀態(tài)欄直接顯示文件接收和拒絕的確認(rèn)界面可以直接在這里mContext.sendBroadcast(intent);將廣播發(fā)送出去

//省略若干…

{

//構(gòu)造notification

 Notification n = new Notification();

 n.icon = R.drawable.bt_incomming_file_notification;

 n.flags |= Notification.FLAG_ONLY_ALERT_ONCE;

 n.flags |= Notification.FLAG_ONGOING_EVENT;

 n.defaults = Notification.DEFAULT_SOUND;

 n.tickerText = title;

 n.when = timeStamp;

 n.color = mContext.getResources().getColor(

 com.android.internal.R.color.system_notification_accent_color);

 n.setLatestEventInfo(mContext, title, caption, PendingIntent.getBroadcast(mContext, 0,

 intent, 0));

 intent = new Intent(Constants.ACTION_HIDE);

 intent.setClassName(Constants.THIS_PACKAGE_NAME, BluetoothOppReceiver.class.getName());

 intent.setDataAndNormalize(contentUri);

 n.deleteIntent = PendingIntent.getBroadcast(mContext, 0, intent, 0);//用戶點(diǎn)擊之后將廣播發(fā)送出去

 mNotificationMgr.notify(id, n);

 }

 }

}

第二個(gè)問題

用戶不點(diǎn)擊確認(rèn)文件接收的按鈕直接進(jìn)行文件接收虑稼。這個(gè)相對(duì)來說比較簡(jiǎn)單

繼續(xù)上面說的,當(dāng)廣播發(fā)送之后在BluetoothOppReceiver.java直接啟動(dòng)BluetoothOppIncomingFileConfirmActivity势木。在這個(gè)activity中作進(jìn)一步的處理蛛倦。

可以看到的是在這個(gè)activity中主要是構(gòu)造上面所說的接收文件確認(rèn)和拒絕的dialog。

要想達(dá)到需要的效果啦桌,只需要將確認(rèn)接收按鈕事件的代碼外移即可溯壶。可以直接移動(dòng)的oncreate中執(zhí)行甫男,完了之后將dialog dismiss掉且改。主要就是如下幾句代碼

if (!mTimeout) {

 // Update database

 mUpdateValues = new ContentValues();

 mUpdateValues.put(BluetoothShare.USER_CONFIRMATION,

 BluetoothShare.USER_CONFIRMATION_CONFIRMED);

 this.getContentResolver().update(mUri, mUpdateValues, null, null);

 Toast.makeText(this, getString(R.string.bt_toast_1), Toast.LENGTH_SHORT).show();

 }

第三個(gè)問題

如何顯示進(jìn)度條。

當(dāng)上面的文件開始接受之時(shí)就需要彈出進(jìn)度條進(jìn)行顯示進(jìn)度板驳。所以在上面的代碼中還需要加入啟動(dòng)進(jìn)度條界面的代碼又跛。具體是

 Intent in = new Intent(this, BluetoothOppTransferActivity.class);

 in.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

 in.setDataAndNormalize(mUri);

 this.startActivity(in);

至此,單文件就開始傳輸并且已經(jīng)顯示進(jìn)度條笋庄。

第四個(gè)問題

文件傳輸完場(chǎng)之后,進(jìn)度條界面如何三秒之后自動(dòng)消失倔监。

進(jìn)入BluetoothOppTransferActivity這個(gè)activity直砂,首先先定義一個(gè)消失的方法。如下

private void dismissNowDialog(){

 new Handler().postDelayed(new Runnable() {

 @Override

 public void run() {

 dismiss();

 }

 }, 2000);

 }

之后再setUpDialog()中mWhichDialog == DIALOG_RECEIVE_COMPLETE_SUCCESS和mWhichDialog == DIALOG_RECEIVE_COMPLETE_FAIL時(shí)調(diào)用這個(gè)方法即可浩习。

寫到這里静暂,單文件文件傳輸全程不需要用戶進(jìn)行任何點(diǎn)擊就可以自動(dòng)接收完成。

但是不知道您有沒有想過一個(gè)問題谱秽,在接受完之后dismiss掉了界面洽蛀,那么在多文件傳輸時(shí)后面的那些文件進(jìn)度條是否還會(huì)顯示呢?答案是不會(huì)的疟赊。

第五個(gè)問題

多文件時(shí)如何顯示所有文件傳輸?shù)倪M(jìn)度條郊供。

思路就是,再多文件傳輸時(shí)近哟,單個(gè)文件傳輸完驮审,狀態(tài)欄會(huì)進(jìn)行更新顯示其他文件的進(jìn)度信息,考慮到這里吉执,繼續(xù)進(jìn)入BluetoothOppNotification.java這個(gè)類疯淫,在updateActiveNotification()方法中可以看到多文件在傳輸時(shí),它是通過Notification.Builder來進(jìn)行刷新顯示的戳玫,我們的需求并不是這樣熙掺,所以這些并不可取。繼續(xù)往下看可以看到重點(diǎn)是Intent intent = new Intent(Constants.ACTION_LIST);這個(gè)可以理解為處理多文件的咕宿。原生的代碼并沒有很好地辦法來區(qū)分多文件還是單文件币绩,所以需要在這里想辦法進(jìn)行處理蜡秽。筆者在做的時(shí)候看到這個(gè)很是興奮,一想這不很簡(jiǎn)單嗎类浪,和單文件傳輸如出一轍我只需要將廣播手動(dòng)發(fā)送一遍即可载城。結(jié)果會(huì)讓你崩潰的,這里簡(jiǎn)單說下费就,假如十個(gè)文件在傳輸時(shí)那么這個(gè)廣播他會(huì)發(fā)幾遍呢诉瓦?最終的結(jié)果就是后面的界面不停的閃爍加重疊。所以這里要做的就是在文件傳輸時(shí)只將這個(gè)廣播發(fā)送一次力细,但是并沒有現(xiàn)成的方法或變量來標(biāo)示是否多文件傳輸睬澡。

第六個(gè)問題

如何在一個(gè)循環(huán)中只根據(jù)自己的需求將廣播發(fā)送一次出去呢?

筆者這里采用的思路是定義一個(gè)任意類型的變量眠蚂,給定一個(gè)初始值煞聪,找一個(gè)在文件接收時(shí)肯定會(huì)調(diào)用的一個(gè)方法,在這個(gè)方法中改變變臉的值逝慧,完了之后在發(fā)送廣播時(shí)加上對(duì)這個(gè)變量的判斷昔脯,完了之后將變量的值回復(fù)默認(rèn)值。下次的話笛臣,他肯定就不會(huì)再發(fā)廣播出去云稚,保證廣播只發(fā)送了一次,即可達(dá)到需求沈堡。

Private Int temp =0;

 private void updateActiveNotification() {

……

 if(temp==1){//通過這個(gè)判斷保證廣播只會(huì)發(fā)送一次

 mContext.sendBroadcast(intent);

 temp=temp+1;

 }

……

}

rivate void updateIncomingFileConfirmNotification() {

//這個(gè)方法中加入如下代碼

  if(temp==1){

 temp=temp+1;

 return;

 }

……

temp=1;

}

至此静陈,整個(gè)需求處理完畢。當(dāng)讓如果在接受完畢之后還想顯示多少文件傳輸完成诞丽,多少文件傳輸失敗的話可以通過在代碼中BluetoothOppTransferActivity.java中動(dòng)態(tài)的改變dialog的顯示信息來進(jìn)行處理鲸拥,需要注意的是在這個(gè)類里面是不知道有多少文件傳輸完成和失敗的,需要從BluetoothOppNotification.java 的updateCompletedNotification()方法中僧免,將

int outboundSuccNumber = 0;

 int outboundFailNumber = 0;

 int outboundNum;

 int inboundNum;

 int inboundSuccNumber = 0;

 int inboundFailNumber = 0;

參數(shù)選擇性的進(jìn)行傳輸或者保存刑赶,從而在上面說的界面顯示出來。

最后再來一個(gè)小知識(shí)點(diǎn)結(jié)束懂衩。不知有沒有想過角撞,藍(lán)牙文件在傳輸時(shí)如何判斷文件是正在傳輸還是已經(jīng)傳輸完畢呢?原生的藍(lán)牙代碼之后提供藍(lán)牙的配對(duì)勃痴,連接等狀態(tài)谒所,并不會(huì)提供文件傳輸?shù)臓顟B(tài),那么就需要自己來實(shí)現(xiàn)沛申。思路就是藍(lán)牙文件的傳輸是通過流來進(jìn)行的劣领,那么我只需要知道它所對(duì)應(yīng)的劉是否關(guān)閉即可知道文件是否傳輸完成。

在framework\base\obex\javax\obex下面有個(gè)ServerSession類铁材,在這個(gè)里面會(huì)通過判斷ObexTransport; InputStream OutputStream來判斷是否關(guān)閉尖淘,可以自己在這里加接口提供給外部奕锌,用來判斷藍(lán)牙文件是否傳輸完成,比較簡(jiǎn)單村生。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末惊暴,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子趁桃,更是在濱河造成了極大的恐慌辽话,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卫病,死亡現(xiàn)場(chǎng)離奇詭異油啤,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蟀苛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門益咬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人帜平,你說我怎么就攤上這事幽告。” “怎么了裆甩?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵冗锁,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我淑掌,道長(zhǎng)蒿讥,這世上最難降的妖魔是什么蝶念? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任抛腕,我火速辦了婚禮,結(jié)果婚禮上媒殉,老公的妹妹穿的比我還像新娘担敌。我一直安慰自己,他們只是感情好廷蓉,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布全封。 她就那樣靜靜地躺著,像睡著了一般桃犬。 火紅的嫁衣襯著肌膚如雪刹悴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天攒暇,我揣著相機(jī)與錄音土匀,去河邊找鬼。 笑死形用,一個(gè)胖子當(dāng)著我的面吹牛就轧,可吹牛的內(nèi)容都是我干的证杭。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼妒御,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼解愤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起乎莉,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤送讲,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后梦鉴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體李茫,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年肥橙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了魄宏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡存筏,死狀恐怖宠互,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情椭坚,我是刑警寧澤予跌,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站善茎,受9級(jí)特大地震影響券册,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜垂涯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一烁焙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧耕赘,春花似錦骄蝇、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至册招,卻和暖如春岔激,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背是掰。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來泰國打工虑鼎, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人冀惭。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓震叙,卻偏偏與公主長(zhǎng)得像掀鹅,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子媒楼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,734評(píng)論 25 707
  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程乐尊,因...
    小菜c閱讀 6,365評(píng)論 0 17
  • Guide to BluetoothSecurity原文 本出版物可免費(fèi)從以下網(wǎng)址獲得:https://doi.o...
    公子小水閱讀 7,923評(píng)論 0 6
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件划址、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,058評(píng)論 4 62
  • “老師扔嵌,我是高二三班的白鈺,現(xiàn)在在中國傳媒大學(xué)夺颤,北京的辣一所^_^” 打開微博痢缎,一條私信彈了出來。 這個(gè)帥帥的小伙...
    正能量小龜閱讀 346評(píng)論 2 0