android接受不到开机广播 5
manifast里注册<receiverandroid:name=".BootReceiver"><intnet-filter><actionandroid:name="...
manifast里注册
<receiver android:name=".BootReceiver" >
<intnet-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.DEFAULT"/>
</intnet-filter>
</receiver>
和
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
但是在BootReceiver中接受不到广播
@Override
public void onReceive(Context context, Intent intent) {
Log.i("TAG", "系统启动完毕");
}
这是怎么回事,代码有问题么? 展开
<receiver android:name=".BootReceiver" >
<intnet-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.DEFAULT"/>
</intnet-filter>
</receiver>
和
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
但是在BootReceiver中接受不到广播
@Override
public void onReceive(Context context, Intent intent) {
Log.i("TAG", "系统启动完毕");
}
这是怎么回事,代码有问题么? 展开
展开全部
intent 判断 intent.getAction()是否与 android.intent.action.BOOT_COMPLETED 相同,发出的是这个,你没监听这个Action 。 另外注意的是,如果是 3.1以下的系统,没问题。3.1以上的系统,需要有Activity存在,并且启动一次程序,才能够实现广播。
追问
如果我是4.0系统的话,要怎样才在系统启动完毕后开启自己的服务
追答
之前说了,你安装好自己的应用后,启动一下该APP,然后开机以后就会存在这个广播,就可以实现开机自启了。 需要例子的话,再说,你自己先试着。
展开全部
不在manifest中注册 在代码中手动注册一下试试
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
android4.0以后就禁用了第三方APP的开机广播,只有系统应用才能收到开机广播。官网文档就这么说的。还有就是第三方APP必须要启动过一次才能接收到,如果你的app没有任何界面,只是在后台启动一个服务,google会认为是流氓软件,禁止启用开机广播。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的代码没问题。开机启动服务需要系统权限,如果你是用adb install 安装的apk是普通用户权限,服务启动不起来。因此你要把apk推到system/app目录下则是拥有系统权限的应用就可以了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你就实现了抽象类,没看到这个类在哪个activity调用啊?,是".BootReceiver"吗,在activity或其他类中也可以用代码注册,就是 调用类似下面RegisterBoradcastReceiver() ,还可以this.getActivity().unregisterReceiver(mBroadcastReceiver);取消注册
//还有,开机广播之前,你确定你的服务启动了吗,需要安装在内存,刷进去最好
private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals("android.intent.action.BOOT_COMPLETED")) {
Log.i("TAG", "系统启动完毕");
}
}
};
////this.getActivity(),如果本身就是activity就不用get了
private void getActivityRegisterBoradcastReceiver() {
IntentFilter myIntentFilter = new IntentFilter();
myIntentFilter.addAction("android.intent.action.BOOT_COMPLETED");
this.getActivity().registerReceiver(mBroadcastReceiver,
myIntentFilter);
}
追问
实现的广播接受者可以在manifast.xml中进行注册后就可以使用了,没必要用activity什么的来动态注册。我的应用也是装在内存里的,我不知道你表述的是不是有问题,我是想依靠开机广播来开启我的服务,不是要我的服务比开机广播还要早。
追答
哦,看来你的服务进程没有被系统的启动广播自动启动起来。你添加了开机自启动的权限,不代表服务进程就启动了啊,有可能被禁止了(360之类),有可能你的启动模式是快速启动(2.3以后的就支持),代码没问题,需要添加一个判断action name的
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询