Android广播机制
Intent有一个重要的机制就是作为不同进程间传递数据和事件的媒介。通常我们自己的应用或者Android系统本身在某些事件来临的时候会将Intent广播出去的,而注册的Broadcast Receiver可以监听到这些Intent并且可以获得保存在Intent中的数据。
例如,在电池电量发生变化,网络连接发生变化或者是来电,来短信的时候,Android系统都会将相关的Intent进行广播
。如果注册了针对这些事件的Broadcast Receiver,那么就可以处理这些事件。
实现广播事件
Intent intent=new Intent("HelloWorld");
intent,putExtra("DATA","HHHHHHH");
sendBroadcast(intent);
通过继承BroadcaastReceiver类,并重写这个类当中的onReceiver方法来实现
public class WorkReceiver extends BroadcastReceiver
{
public void onReceive(Context context,Intent intent)
{
}
}
在onReceive方法不要有执行超过5秒的代码。如果有的话,建议在该方法中写一个线程,单独执行
注册和注销BroadcastReceiver
方法一:在AndroidManifest.xml中中注册,推荐用这种方法注册
<receiveer android:name="WorkReceiver">
<intent-filter>
<action android:name="HelloWorld"/>
</intent-filter>
</receiver>
第二种方法是在代码中注册,这种方法的好去是灵活。
IntentFilter filter=new IntentFilter("HelloWorld");
WorkReceiver wr=new WorkReceiver();
registerReceiver(wr,filter);
注销的话
unregisterReceiver(wr);
下面是一个实例
package com.example.androidtest;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); menu.add(0, 0, 0, "WorkReceiver"); return true; }@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// TODO Auto-generated method stubif(item.getItemId()==0){Intent intent=new Intent("HelloWorld");this.sendBroadcast(intent);}return super.onOptionsItemSelected(item);} }
WorkReceiver类
package com.example.androidtest;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.widget.Toast;public class WorkReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent) {Toast.makeText(context, "HelloWorld", Toast.LENGTH_LONG).show();}}
AndroidMenifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.androidtest" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/title_activity_main" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name="WorkReceiver"> <intent-filter> <action android:name="HelloWorld"/> </intent-filter> </receiver> </application></manifest>
