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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

sendStickyBroadcast和sendStickyOrderedBroadcast

發(fā)布時(shí)間:2023/11/27 生活经验 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sendStickyBroadcast和sendStickyOrderedBroadcast 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

sendStickyBroadcast和sendStickyOrderedBroadcast - 牛仔的移動(dòng)開發(fā)博客 - 博客頻道 - CSDN.NET

sendStickyBroadcast和sendStickyOrderedBroadcast發(fā)出的廣播會(huì)一直滯留(等待),以便有人注冊(cè)這則廣播消息后能盡快的收到這條廣播。其他功能與sendBroadcast相同。但是使用sendStickyBroadcast 發(fā)送廣播需要獲得BROADCAST_STICKY?permission,如果沒有這個(gè)permission則會(huì)拋出異常。

?

例子:

[java]?view plaincopyprint?
  1. package?com.android.test;??
  2. ??
  3. import?android.app.Activity;??
  4. import?android.content.Context;??
  5. import?android.content.Intent;??
  6. import?android.os.Bundle;??
  7. import?android.view.View;??
  8. import?android.view.View.OnClickListener;??
  9. import?android.widget.Button;??
  10. ??
  11. public?class?StickyBroadcastTest?extends?Activity?{??
  12. ???
  13. ?private?Button?mSendBroadcast;??
  14. ?private?Button?mSendStickyBroadcast;??
  15. ?private?Button?mNextActivity;??
  16. ?private?Context?mContext;??
  17. ???
  18. ?private?int?mStickyBrcCount;??
  19. ????
  20. ????/**?Called?when?the?activity?is?first?created.?*/??
  21. ????@Override??
  22. ????public?void?onCreate(Bundle?savedInstanceState)?{??
  23. ????????super.onCreate(savedInstanceState);??
  24. ????????setContentView(R.layout.main);??
  25. ????????mContext?=?getApplicationContext();??
  26. ????????mSendBroadcast?=?(Button)findViewById(R.id.broadcast);??
  27. ????????mSendStickyBroadcast?=?(Button)findViewById(R.id.stickybroadcast);??
  28. ????????mNextActivity?=?(Button)findViewById(R.id.next_activity);??
  29. ??????????
  30. ????????mSendBroadcast.setOnClickListener(new?OnClickListener()?{??
  31. ?????
  32. ???@Override??
  33. ???public?void?onClick(View?v)?{??
  34. ??????
  35. ????Intent?intent?=?new?Intent("com.android.action.broadcast");??
  36. ????mContext.sendBroadcast(intent);??
  37. ???}??
  38. ??});??
  39. ??????????
  40. ????????mSendStickyBroadcast.setOnClickListener(new?OnClickListener()?{??
  41. ?????
  42. ???@Override??
  43. ???public?void?onClick(View?v)?{??
  44. ????mStickyBrcCount++;??
  45. ????Intent?intent?=?new?Intent("com.android.action.sticky.broadcast");??
  46. ????intent.putExtra("sent_count",?mStickyBrcCount);??
  47. ????mContext.sendStickyBroadcast(intent);??
  48. ??????
  49. ???}??
  50. ??});????
  51. ????????mNextActivity.setOnClickListener(new?OnClickListener()?{??
  52. ?????
  53. ???@Override??
  54. ???public?void?onClick(View?v)?{??
  55. ????Intent?intent?=?new?Intent(StickyBroadcastTest.this,?MyReceiverActivity.class);??
  56. ????startActivity(intent);?????
  57. ??????
  58. ???}??
  59. ??});??
  60. ????}??
  61. ??
  62. ?@Override??
  63. ?protected?void?onResume()?{??
  64. ??//?TODO?Auto-generated?method?stub???
  65. ??super.onResume();??
  66. ??mStickyBrcCount?=?0;??
  67. ?}??
  68. ?????
  69. }??
  70. ??
  71. ???
  72. //MyReceiverActivity????
  73. package?com.android.test;??
  74. ??
  75. import?android.app.Activity;??
  76. import?android.content.BroadcastReceiver;??
  77. import?android.content.Context;??
  78. import?android.content.Intent;??
  79. import?android.content.IntentFilter;??
  80. import?android.os.Bundle;??
  81. import?android.util.Log;??
  82. ??
  83. public?class?MyReceiverActivity?extends?Activity?{??
  84. ??
  85. ?private?IntentFilter?mIntentFilter;??
  86. ?private?final?static?String?TAG?=?"MyReceiverActivity";??
  87. ????/**?Called?when?the?activity?is?first?created.?*/??
  88. ????@Override??
  89. ????public?void?onCreate(Bundle?savedInstanceState)?{??
  90. ????????super.onCreate(savedInstanceState);??
  91. ????????setContentView(R.layout.broadcast_receiver);??
  92. ??????????
  93. ????????mIntentFilter?=?new?IntentFilter();?????
  94. ????????mIntentFilter.addAction("com.android.action.broadcast");?????
  95. ????????mIntentFilter.addAction("com.android.action.sticky.broadcast");?????
  96. ??
  97. ????}??
  98. ???????
  99. ?private?BroadcastReceiver??mReceiver?=?new?BroadcastReceiver?()?{??
  100. ??@Override??
  101. ??public?void?onReceive(Context?context,?Intent?intent)?{??
  102. ???final?String?action?=?intent.getAction();??
  103. ???int?count?=?intent.getIntExtra("sent_count",?-1);??
  104. ???Log.d(TAG,?"action?=?"?+?action?+?"and?count?=?"?+?count);??
  105. ?????
  106. ???//context.removeStickyBroadcast(intent);???
  107. ??}??
  108. ?};??
  109. ??
  110. ?@Override??
  111. ?protected?void?onPause()?{??
  112. ??//?TODO?Auto-generated?method?stub???
  113. ??super.onPause();??
  114. ??unregisterReceiver(mReceiver);?????
  115. ??
  116. ?}???
  117. ??
  118. ?@Override??
  119. ?protected?void?onResume()?{??
  120. ??//?TODO?Auto-generated?method?stub?????
  121. ??super.onResume();??
  122. ??registerReceiver(mReceiver,?mIntentFilter);???
  123. ?}??
  124. ?????
  125. }??

運(yùn)行結(jié)果如圖:

首先點(diǎn)擊next Activity從代碼中可以看到receiver已經(jīng)注冊(cè),但Log無輸出,這是當(dāng)然的了~~~因?yàn)闆]有廣播發(fā)出自然就不會(huì)有人響應(yīng)了。(onPause里unregisterReceiver了

按back后退到上圖

下面分別點(diǎn)擊send broadcast 和 send stickybroadcast按鈕,隨便點(diǎn)擊幾次,此時(shí)對(duì)應(yīng)的receiver并沒有注冊(cè),所以是不會(huì)有人響應(yīng)這兩條廣播的。然后點(diǎn)擊next activity,當(dāng)打開新的activity后對(duì)應(yīng)的receiver被注冊(cè),此時(shí)從日志中就能看出已經(jīng)收到了send stickybroadcast發(fā)出的廣播,但沒有send broadcast發(fā)出的廣播。這就是sendStickyBroadcast的特別之處,它將發(fā)出的廣播保存起來,一旦發(fā)現(xiàn)有人注冊(cè)這條廣播,則立即能接收到。

日志打印為: action = com.android.action.sticky.broadcastand count = 4

從上面的日志信息可以看出sendStickyBroadcast只保留最后一條廣播,并且一直保留下去,這樣即使已經(jīng)處理了這條廣播但當(dāng)再一次注冊(cè)這條廣播后依然可以收到它。

如果你只想處理一遍,removeStickyBroadcast方法可以幫你,處理完了后就將它刪除吧。

?

sticky形式的intent,接收者可以為空,接收者為空時(shí),通常是獲取最后一個(gè)保存廣播的intent,從而獲取intent里的值,不如獲取電池的電量:

因?yàn)锽atteryManager發(fā)送的是sticky形式的intent,所以接收者可以為空?
Intent batteryStatus = registerReceiver(null, ifilter);?

//得到電池當(dāng)前的狀態(tài)(共有5種,包括unkonwn、charging、discharging、not charging、full)?
int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);?
//是否處于充電狀態(tài)?
boolean isCharging = ?BatteryManager.BATTERY_STATUS_CHARGING ;

轉(zhuǎn)載于:https://www.cnblogs.com/seven1979/p/4333070.html

總結(jié)

以上是生活随笔為你收集整理的sendStickyBroadcast和sendStickyOrderedBroadcast的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。