Android笔记(二十五)发送自定义广播和本地广播

1.发送标准广播
我们通过一个按钮来发送广播,广播接收器接收到广播后执行具体操作。

首先建立布局文件

"http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

然后创建一个自己的广播

public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent intent = new Intent(
                        "com.example.broadcasttest.MY_BROADCAST");
                sendBroadcast(intent);
            }
        });
    }

再新建一个广播接收器来接收我们发送的广播

public class MyBroadcastReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "received", Toast.LENGTH_SHORT).show();
    }
}

最后注册广播接收器

 <receiver android:name=".MyBroadcastReceiver" >
            <intent-filter>
                <action android:name="com.example.mybroadcast. MY_BROADCAST" />
            intent-filter>
        receiver>

2.发送有序广播
有序广播和标准广播基本上一样,只需要修改几个地方。

  • 将发送广播的方式改为sendOrderedBroadcast(intent, null);
  • 设置广播接收器的权限intent-filter android:priority=”100”
  • 广播优先级高的权限可以终止广播abortBroadcast();

3.本地广播机制
为了能够简单地解决广播的安全性问题, Android 引入了一套本地广播机制,使用这个机制发出的广播只能够在应用程序的内部进行传递,并且广播接收器也只能接收来自本应用程序发出的广播。

另外还有一点需要说明,本地广播是无法通过静态注册的方式来接收的。

public class MainActivity extends ActionBarActivity {

    private IntentFilter intentFilter;
    private LocalReceiver localReceiver;
    private LocalBroadcastManager localBroadcastManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        localBroadcastManager = LocalBroadcastManager.getInstance(this);
        Button button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent intent = new Intent(
                        "com.example.mybroadcast.MY_BROADCAST");
                localBroadcastManager.sendBroadcast(intent);
            }
        });
        intentFilter = new IntentFilter();
        intentFilter.addAction("com.example.mybroadcast.MY_BROADCAST");
        localReceiver = new LocalReceiver();
        localBroadcastManager.registerReceiver(localReceiver, intentFilter);
    }

    protected void onDestroy() {
        super.onDestroy();
        localBroadcastManager.unregisterReceiver(localReceiver);
    }

    class LocalReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(context, "received local broadcast",
                    Toast.LENGTH_SHORT).show();
        }
    }

你可能感兴趣的:(android)