广播学习

2018-09-11  本文已影响0人  Crane_FeiE

广播的类型

注册广播接收器

1.动态注册----在代码中注册接收器,仅当应用启动时可以收到广播

Sample Code


public class ReceiverTestActivity extends AppCompatActivity {
    private NetworkChangeReceiver mReceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_receiver_test);
        initReceiver();
    }

    private void initReceiver() {
        IntentFilter filter = new IntentFilter();
        filter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
        mReceiver = new NetworkChangeReceiver();
        registerReceiver(mReceiver, filter);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if(mReceiver != null){
            unregisterReceiver(mReceiver);
        }
    }

    class NetworkChangeReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            //TODO
        }
    }

    public static Intent formatIntent(Context originActivity){
        return new Intent(originActivity, ReceiverTestActivity.class);
    }
}

2.静态注册---- 在Manifest中注册,可以在不运行的时候也接到广播,并处理相应逻辑

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <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">

        <!--exported = "true": Broadcasts outside this app can deliver to this receiver-->
        <receiver android:name=".BootReceiver"
            android:enabled="true"
            android:exported="true"> 
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
        </receiver>
    </application>

发送自定义广播

Sample Code

1. 发送标准广播

    //you should register a custom broadcast receiver in order to handle this broadcast
    private void emmitCustomBroadcast(){
        // String param is your custom intent action
        Intent intent = new Intent("com.example.crane.myfirstline.action.custom_broadcast");
        sendBroadcast(intent);
    }

2.发送有序广播

    //you should register a custom broadcast receiver in order to handle this broadcast
    private void emmitOrderedCustomBroadcast(){
        // String param is your custom intent action, 
        Intent intent = new Intent("com.example.crane.myfirstline.action.custom_broadcast");
        
        //String param is your permission set for this broadcast, it's nullable
        sendOrderedBroadcast(intent, null);
    }

3.阻断有序广播

在广播接收器中onReceive()方法中逻辑末尾添加abortBroadcast()方法

4.使用本地广播

本地广播可以保证该广播只在应用内被接收,防止外部利用广播侵入应用;
使用LocalBroadcastManager的实例中的sendBroadcast(Intent intent)方法
Sample Code

    private void emmitLocalBroadcast() {
        //get Instance of LocalBroadcastManager
        LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(this);
        Intent intent = new Intent("com.example.crane.myfirstline.action.local_broadcast");
        localBroadcastManager.sendBroadcast(intent);
    }

作业

利用广播实现强制下线功能

上一篇 下一篇

猜你喜欢

热点阅读