注意:广播的发送都是全局发送的,跨应用的,所以我们在使用的时候不能使用下面的action传参数,需要添加参数
intent.setComponent(new ComponentName("com.archermind.fm", "com.archermind.fm.MusicWidgetBroadcastReceiver"));
第一步:自定义广播
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
int count = bundle.getInt( "count" );
Log.v("MainActivity", "Count is " + count);}}
第二步:声明和注册广播
private MyReceiver receiver = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate( savedInstanceState );
setContentView( R.layout.activity_main );
//启动服务
startService(new Intent(MainActivity.this, MyService.class));
//注册广播接收器
receiver=new MyReceiver();
IntentFilter filter=new IntentFilter();
filter.addAction("com.project.moli.demobroad.MyService");
MainActivity.this.registerReceiver(receiver,filter);
}
@Override
protected void onDestroy() {
//结束服务
stopService(new Intent(MainActivity.this, MyService.class));
super.onDestroy();
}
第三步:补充服务端
public class MyService extends Service {
private int count = 0;
private boolean tag=false;
@Override
public void onCreate() {
super.onCreate();
new Thread(new Runnable() {
@Override
public void run() {
while (!tag) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
count++;
Log.v("MyService", "Count is " + count);
//发送广播
Intent intent=new Intent();
intent.putExtra("count", count);
intent.setAction("com.project.moli.demobroad.MyService");
sendBroadcast(intent);}}
}).start();
}
@Override
public IBinder onBind(Intent intent) {return null;}
@Override
public void onDestroy() {
super.onDestroy();
count=0;
tag = true;
Log.v("MyService", "on destroy");
}}
第三步:清单文件中注册服务(注意资源回收 广播和服务)
<service
android:name=".MyService"
android:enabled="true"
android:exported="true"
tools:ignore="WrongManifestParent"></service>