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> www.zzzyk.com
</receiver>
第二种方法是在代码中注册,这种方法的好去是灵活。
IntentFilter filter=new IntentFilter("HelloWorld");
WorkReceiver wr=new WorkReceiver();
registerReceiver(wr,filter);
注销的话
unregisterReceiver(wr);
下面是一个实例
[java]
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;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
if(item.getItemId()==0)
{
Intent intent=new Intent("HelloWorld");
this.sendBroadcast(intent);
}
return super.onOptionsItemSelected(item);
}
}
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;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
if(item.getItemId()==0)
{
Intent intent=new Intent("HelloWorld");
this.sendBroadcast(intent);
}
return super.onOptionsItemSelected(item);
}
}
WorkReceiver类
[java]
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{
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "HelloWorld", Toast.LENGTH_LONG).show();
}
}
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{
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "HelloWorld", Toast.LENGTH_LONG).show();
}
}
AndroidMenifest.xml
[java]
<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>
&n
补充:移动开发 , Android ,