BroadcastReceiver廣播接聽器的初步認識,動態註冊,靜態註冊(1)

BroadcastReceiver廣播接聽器的初步認識,動態註冊,靜態註冊(1)

1、靜態註冊,在清單文件AndroidMinifest中註冊,靜態註冊的廣播只要應用一安裝,並且該應用至少啓動過一次,該廣播會一直有效

2、動態註冊,一般在ActivityonCreate()方法中註冊,動態註冊的廣播在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 的效果

 ....無語、、、沒測試出來

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章