Android 廣播BroadCastReceiver

建立一個廣播接收器的步驟:android

1.建立一個類 extends BroadCastReceiver,重寫onReceive()方法安全

2.註冊廣播網絡

3.發送廣播線程

context.sendBroadcast(new Intent("action"));        //    廣播的頻道生命週期

 

註冊廣播的兩種方式:get

1.全局廣播:it

註冊在清單配置文件,關閉應用後仍在監聽io

<receiver android:name="全路徑">ast

    <intent-filter>test

        <action android:name="xxx"/>        //    能夠爲全路徑的小寫

    </intent-filter>

</receiver>

2.動態註冊

MainActivity ——> onCreate() {

    IntentFilter filter = new IntentFilter();

    filter.addAction(MY_ACTION);

    receiver = new MyBroadCast();

    registerReceiver(receiver, filter);

}

onDestroy(){        unregisterReceiver(receiver);    }

 

系統廣播:

Intent.ACTION_BATTERY_LOW                        低電量提醒廣播

Intent.ACTION_BATTERY_CHANGED

Intent.ACTION_BOOT_COMPLETED                開機完成

Intent.ACTION_SHUTDOWN                           關機提醒

Intent.ACTION_SCREEN_OFF                           屏幕關閉

Intent.ACTION_SCREEN_ON

Intent.ACTION_USER_PRESENT                        屏幕解鎖

Intent.ACTION_NEW_OUTGOING_CALL            撥號廣播

TelephoneManager.ACTION_PHONE_STATE_CHANGED        來電時電話狀態改變(如響鈴、空置、掛斷)

Telephone.Sms.Intent_SMS_RECEIVED_ACTION            接收短信

ConnectivityManager.CONNECTIVITY_ACTION            網絡狀態改變

 

example:

ConnectivityManager.CONNECTIVITY_ACTION            網絡狀態改變

onReceive(Context context, Intent intent) {

    ConnectivityManager manager = (ConnectivityManager)context.getSystenService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo networkInfo = manager.getActiveNetworkInfo();

    if(networkInfo != null && networkInfo.isAvailable() && networkInfo.isConnectedOrConnecting()) {

        String name = networkInfo.getTypeName();

    }else {

        context.Toast.makeText(context, "沒有網絡",Toast.LENTH_LONG).show();

    }

}

 

廣播的生命週期短暫:接收到廣播時建立,onReceive()方法結束時銷燬,不要在廣播接收者中作一些耗時或建立子線程耗時操做,應在服務Service中完成

 

有序廣播(action同樣)

context.sendOrderedBroadcast(intent, 權限str);

1.按照註冊順序

2.按大小        <intent-filter android:property="100">        //    1000最高,-1000最低

3.中斷低的廣播接收器接收廣播

onReceiver() {

    ...

    abortBroadcast();

}

 

廣播的安全性:

發送端:

1.指定接收廣播的應用包名:

intent.putPackage("com.fgl.test");

2.發送帶權限的廣播:

定義權限:<permisson android:name = "com.fgl.testsafetypermission"/>

<use-permission android:name = "com.fgl.testsafetypermission"/>

sendBroadcast(intent, "com.fgl.testsafetypermission");

接收端:不接收外部應用的廣播        <receiver ... android:exported="false">

相關文章
相關標籤/搜索