android.intent.action.TIME_TICK在清单文件里注册不起作用

来源:互联网 发布:淘宝生意参谋入口 编辑:程序博客网 时间:2024/06/04 18:28

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 {@Overridepublic 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{@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubreturn null;}@Overridepublic void onCreate() {// TODO Auto-generated method stubsuper.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{@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stubSystem.out.println("电量改变了!");//Toast.makeText(context, "电量在改变", Toast.LENGTH_SHORT).show();}}

接收屏幕改变的广播:
public class ScreenBroadcast extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stubSystem.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{@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stubSystem.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>




原创粉丝点击