Broadcast总结 service

有时候离开应用就会接收不到系统的广播是因为系统默认发送的广播都会有一个参数

ntent startIntent = new Intent();
startIntent.putExtra("pkg", getPackageName());
startIntent.setAction("com.lenovo.speechcamera.start");
startIntent.setFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);//系统默认发送的是startIntent.setFlags(Intent.FLAG_EXCLUDE_STOPPED_PACKAGES);
sendBroadcast(startIntent);

这样退出应用就会接收不到广播  系统默认不包括停止状态的包

BroadcastReceiver可以是静态定义的 也可以是动态定义的

IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
 40         // 增加可以接收的广播频道(Action)
 41         filter.addAction(Intent.ACTION_BATTERY_LOW);// 低电量的广播
 42         filter.addAction(Intent.ACTION_POWER_CONNECTED);// 电源连接的广播
 43         filter.addAction(Intent.ACTION_POWER_DISCONNECTED);// 电源断开连接的广播
 44 
 45         // 2. 注册广播接收器-接收系统的电量改变广播
 46         registerReceiver(myReciver, filter);
静态在Xml文件中定义
     <receiver
41             android:name="com.qf.broadcastreceiver04.MyReceiver02"
42             android:permission="com.qf.permission.print" >
43             <intent-filter android:priority="80" >
44                 <action android:name="com.qf.broadcast.print" />
45             </intent-filter>
46         </receiver>

意图服务是异步进行的  执行完操作后就会自己消毁(onDestroy方法)


发带有权限的广播时 要在xml文件中定义权限 接受者要接受广播得先在配置文件中加权限(第一关)还要在receiver中中定义action(频道)是否一致

<receiver android:name="com.qf.broadcastreceiver05.MyReceiver01">
<intent-filter>
<action android:name="com.qf.broadcast.print"/>
</intent-filter>
</receiver>

1、startService();

2、bindService(new Intent(getApplicationContext(),TimerService.class),
conn, BIND_AUTO_CREATE);

两种启动Service的方式后者会受activity影响‘



原文地址:https://www.cnblogs.com/bimingcong/p/4822267.html