BroadcastReceiver廣播接聽器的初步認識,動態註冊,靜態註冊(1)
1、靜態註冊,在清單文件AndroidMinifest中註冊,靜態註冊的廣播只要應用一安裝,並且該應用至少啓動過一次,該廣播會一直有效
2、動態註冊,一般在Activity的onCreate()方法中註冊,動態註冊的廣播在Activity停止運行後也將解除註冊,這時廣播接收器不能繼續收到外部發來的廣播
清單文件註冊:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="project.wgc.mybroadcastreceiver01" >
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
<activity android:name=".MainActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
//清單文件註冊
<receiver android:name=".MyBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.NEW_OUTGOING_CALL"></action>
</intent-filter>
</receiver>
</application>
</manifest>
代碼中動態註冊:
public class
MainActivity extends
AppCompatActivity {
private
ScreenBroadcastReceiver screenBroadcastReceiver
;
@Override
protected void
onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
screenBroadcastReceiver
= new
ScreenBroadcastReceiver();
IntentFilter
intentFilter =
new IntentFilter();
intentFilter.addAction(Intent.ACTION_SCREEN_OFF);
intentFilter.addAction(Intent.ACTION_SCREEN_ON);
registerReceiver(screenBroadcastReceiver,intentFilter);//動態註冊方式
}
@Override
protected void
onDestroy() {
super.onDestroy();
unregisterReceiver(screenBroadcastReceiver);//解除註冊
}
}
自定義兩個廣播監聽器,一個監聽電話打進來的MyBroadcastReceiver,一個監聽手機鎖屏狀態的ScreenBroadcastReceiver
具體代碼如下:
public class
MyBroadcastReceiver extends
BroadcastReceiver {
@Override
public void
onReceive(Context context,
Intent intent) {
String resultData = getResultData();
resultData =
"1800" + resultData;//設置在call進來的電話號碼前面加上1800.
setResultData(resultData);
}
}
public class
ScreenBroadcastReceiver extends
BroadcastReceiver {
@Override
public void
onReceive(Context context,
Intent intent) {
if
(Intent.ACTION_SCREEN_OFF.equals(intent.getAction())){
Log.d("weihuan",
"onReceive: +鎖屏");//監聽手機鎖屏意圖
}else if
(Intent.ACTION_SCREEN_ON.equals(intent.getAction())){
Log.d("weihuan",
"onReceive: +亮屏");
}
}
}
監聽到的效果圖如下:
按下手機的鎖屏鍵測試的結果
ScreenBroadcastReceiver 的監聽效果
06-02 10:46:23.388 14643-14643/project.wgc.mybroadcastreceiver01 D/weihuan: onReceive: +鎖屏
06-02 10:46:35.925 14643-14643/project.wgc.mybroadcastreceiver01 D/weihuan: onReceive: +亮屏
06-02 10:46:46.328 14643-14643/project.wgc.mybroadcastreceiver01 D/weihuan: onReceive: +鎖屏
06-02 10:46:53.111 14643-14643/project.wgc.mybroadcastreceiver01 D/weihuan: onReceive: +亮屏
電話打進來的MyBroadcastReceiver 的效果
....無語、、、沒測試出來