android.intent.action.TIME_TICK在清单文件里注册不起作用
android.intent.action.TIME_TICK和android.intent.action.SCREEN_OFF ,和android.intent.action.SCREEN_ON,和android.intent.action.BATTERY_CHANGED在清单文件里注册时不起作用。这时在一个服务里面通过代码注册就可以接收这些广播了。比如,我在这里接收开机的广播,在这个广播里面启动一个服务,在这个服务里面注册接收上面所说的几个action的广播,就可以达到效果了。具体代码如下:
1.接收系统的开机的广播,在这个广播里开启一个服务:
- public class BootBroadcastReceiver extends BroadcastReceiver {
- @Override
- public void onReceive(Context context, Intent intent) {
- // TODO Auto-generated method stub
- //后边的XXX.class就是要启动的服务
- Intent service = new Intent(context,ServiceForBroadcast.class);
- context.startService(service);
- Log.v("TAG", "开机自动服务自动启动.....");
- System.out.println("开机启动的服务!");
- }
- }
2.上面广播中开启的服务是:
- public class ServiceForBroadcast extends Service{
- @Override
- public IBinder onBind(Intent intent) {
- // TODO Auto-generated method stub
- return null;
- }
- @Override
- public void onCreate() {
- // TODO Auto-generated method stub
- super.onCreate();
- /**接收屏幕改变广播的action*/
- IntentFilter filter1 = new IntentFilter(Intent.ACTION_SCREEN_ON);
- filter1.addAction(Intent.ACTION_SCREEN_OFF);
- /**接收电量改变广播的action*/
- IntentFilter filter2=new IntentFilter();
- filter2.addAction(Intent.ACTION_BATTERY_CHANGED);
- /**接收时间改变广播的action*/
- IntentFilter filter3=new IntentFilter();
- filter3.addAction(Intent.ACTION_TIME_TICK);
- /**在代码中分别注册屏幕改变的广播,电量改变的广播,时间改变的广播*/
- BroadcastReceiver mReceiver1 = new ScreenBroadcast();
- BroadcastReceiver mReceiver2 = new BatteryBroad();
- BroadcastReceiver mReceiver3 = new TimeTickBroadcast();
- registerReceiver(mReceiver1, filter1);
- registerReceiver(mReceiver2, filter2);
- registerReceiver(mReceiver3, filter3);
- }
- }
3.在上面的服务里注册广播:(共三个)
- public class BatteryBroad extends BroadcastReceiver{
- @Override
- public void onReceive(Context context, Intent intent) {
- // TODO Auto-generated method stub
- System.out.println("电量改变了!");
- //Toast.makeText(context, "电量在改变", Toast.LENGTH_SHORT).show();
- }
- }
接收屏幕改变的广播:
- public class ScreenBroadcast extends BroadcastReceiver{
- @Override
- public void onReceive(Context context, Intent intent) {
- // TODO Auto-generated method stub
- System.out.println("屏幕在改变!");
- //Toast.makeText(context, "屏幕在改变", Toast.LENGTH_SHORT).show();
- if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)){
- //收到屏幕开启的通知
- System.out.println("收到屏幕开启的广播");
- }else{
- //收到屏幕关闭的通知
- System.out.println("收到屏幕关闭的广播!");
- }
- }
- }
- public class TimeTickBroadcast extends BroadcastReceiver{
- @Override
- public void onReceive(Context context, Intent intent) {
- // TODO Auto-generated method stub
- System.out.println("时间在改变!");
- //Toast.makeText(context, "时间在改变", Toast.LENGTH_SHORT).show();
- }
- }
4.清单文件:
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.innerbroadcast.main"
- android:versionCode="1"
- android:versionName="1.0" >
- <uses-sdk
- android:minSdkVersion="8"
- android:targetSdkVersion="17" />
- <!-- 获取电池状态的权限 -->
- <uses-permission android:name="android.permission.BATTERY_STATS"/>
- <!-- 开机启动需要的权限 -->
- <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
- <application
- android:allowBackup="true"
- android:icon="@drawable/ic_launcher"
- android:label="@string/app_name"
- android:theme="@style/AppTheme" >
- <!-- 注册服务 -->
- <service android:name="com.innerbroadcast.service.ServiceForBroadcast"></service>
- <!-- 接收开机启动的广播 -->
- <receiver android:name="com.innerbroadcast.service.BootBroadcastReceiver">
- <intent-filter>
- <action android:name="android.intent.action.BOOT_COMPLETED"/>
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </receiver>
- </application>
- </manifest>