show code block

2016年12月19日 星期一

取消靜態廣播(static BroadcastReceiver)的方法


取消靜態廣播(static BroadcastReceiver)的方法


前言:

靜態廣播(static broadcastReceiver)的延伸:
http://nikeru8.blogspot.tw/2016/12/broadcastreceiver.html

取消靜態廣播真的搞了蠻久的,很多文章都說無法取消註冊靜態方法的廣播,其實是錯的,
是可以取消的。


在註冊靜態廣播後,因為沒辦法使用unregisterReceiver的方法取消註冊,我查了蠻多資料的終於找到解。




ComponentName component = new ComponentName(context, MyReceiver.class);
int status = context.getPackageManager().getComponentEnabledSetting(component);
/**
*用來創建 component ,伸手進去manifest.xml的功能
*/


//設置 (允許廣播)
getPackageManager().setComponentEnabledSetting(component, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);

//取消設置 (取消廣播)
getPackageManager().setComponentEnabledSetting(component, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);

/**
*component 設置目標位置,package
*PackageManager.COMPONENT_ENABLED_STATE_ENABLED enabled可讀取 disabled不可讀取
*PackageManager.DONT_KILL_APP 告訴這方法執行後別停止運行app
**/








如何判斷是否已經取消註冊或是成功註冊了?


//判斷成功與否
       if (status == PackageManager.COMPONENT_ENABLED_STATE_ENABLED) {
                  Log.d("fsa", "receiver is enabled");//成功註冊狀態中
              } else if (status == PackageManager.COMPONENT_ENABLED_STATE_DISABLED) {
                  Log.d("fsa", "receiver is disabled");//取消註冊狀態中
              }







沒有留言:

張貼留言

協程(coroutine) - 協程為什麼要學它?

 Coroutine 協程 再強調一次 協程就是由kotlin官方所提供的線程api //Thread Thread { }.start() //Executor val execu...