通信机制

来源:互联网 发布:windows 调试模式 编辑:程序博客网 时间:2024/06/05 02:21

一、广播

1、动态广播  应用启动后才有效

1)、定义一个意图过滤器指定接收的广播内容

intentFilter = new IntentFilter();intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");

2)、注册广播到活动中去,需要指定广播接收器和意图过滤器参数

networkChangeReceiver = new NetworkChangeReceiver();registerReceiver(networkChangeReceiver, intentFilter);

3)、编写广播接收器类实现具体逻辑

class NetworkChangeReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context arg0, Intent arg1) {// TODO Auto-generated method stubConnectivityManager connectionManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfo networkInfo = connectionManager.getActiveNetworkInfo();if (networkInfo != null && networkInfo.isAvailable()) {Toast.makeText(MainActivity.this, "network is available",Toast.LENGTH_SHORT).show();} else {Toast.makeText(MainActivity.this, "network is unavailable",Toast.LENGTH_SHORT).show();}}}

4)、取消注册

protected void onDestroy() {super.onDestroy();unregisterReceiver(networkChangeReceiver);}

2、静态广播 通过开机自动启动,实现不打开应用即可监听

1)、编写广播接收器类实现具体逻辑

public class BootCompleteReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Toast.makeText(context, "network changes", Toast.LENGTH_LONG).show();}}

2)、在Manifest清单文件中<application>标签下添加<receiver>注册

 <receiver android:name=".BootCompleteReceiver" >            <intent-filter>                <action android:name="android.intent.action.CONNECTIVITY_CHANGE" />            </intent-filter>        </receiver>

3、发送自定义广播

1)、编写广播接收器类实现具体逻辑

public class MyBroadcast extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Toast.makeText(context, "收到自定义广播", Toast.LENGTH_LONG).show();}}

2)、在Manifest清单文件中添加<receiver>注册广播

        <receiver android:name=".MyBroadcast" >            <intent-filter>                <action android:name="MyBroadcast" />            </intent-filter>        </receiver>

3)、主活动中发送广播

Intent intent=new Intent("MyBroadcast");sendBroadcast(intent);

4、发送有序广播(android4.0以后取消拦截功能)

1)、新建另一个项目注册上述广播接收器(并编写具体逻辑),则在原项目中发送广播时,新项目也会接收到广播内容,此为标准广播,即所有接收器均可收到

2)、更改发送广播语句

Intent intent=new Intent("MyBroadcast");sendBroadcast(intent,null);

3)、更改注册语句,为过滤器增加android:priority提升优先级

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

4)、更改逻辑语句,接收后增加截断广播的语句

public class MyBroadcast extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Toast.makeText(context, "收到自定义广播", Toast.LENGTH_LONG).show();abortBroadcast();}}

5、使用本地广播

1)、使用LocalBroadcastManager类管理发送广播和注册接收广播来实现

2)、获取实例,发送广播、注册监听

localBroadcastManager = LocalBroadcastManager.getInstance(this);
localBroadcastManager.sendBroadcast(intent); //
localBroadcastManager.registerReceiver(localReceiver, intentFilter);








0 0
原创粉丝点击