需求:开机启动服务监听广播,当收到广播xxx时候上传log到服务器原来在android7.1上已经实现,移植到8.1上面发现收不到广播,网上查询8.1后对广播有限制,试了网上方法都没用,请教大佬如何解决?广播接收器:
public class UploadLogReceiver extends BroadcastReceiver {
private static final String BOAD= "android.intent.action.gmt.logupload";
private static final String ACTION_BOOT = "android.intent.action.BOOT_COMPLETED";
@Override
public void onReceive(Context context, Intent intent) {
String action=intent.getAction();
if(action.equals(BOAD)){
Log.i("test","=================receiver BOAD======");
}else if(action.equals(Intent.ACTION_BOOT_COMPLETED)){
Log.i("test","========receiver bootservice, start back service======");
Intent intentt = new Intent(context, UploadLogService.class);
context.startService(intentt);
}else if(action.equals("android.intent.action.QUICKBOOT_POWERON")){
Log.i("test","========1111111111111111111111111111111111======");
}
}
}
服务public class UploadLogService extends Service {
private String TAG="test";
private String BOARD_UPLOAD="android.intent.action.gmt.logupload";
private UploadLogReceiver receiver=new UploadLogReceiver(); @Override
public IBinder onBind(Intent intent) {
return null;
} @Override
public void onCreate() {
super.onCreate();
Log.i(TAG,"定时6小时执行===================");
IntentFilter intentFilter=new IntentFilter();
intentFilter.addAction(BOARD_UPLOAD);
registerReceiver(receiver,intentFilter);
} @Override
public void onDestroy() {
super.onDestroy();
unregisterReceiver(receiver);
}
}
public class UploadLogReceiver extends BroadcastReceiver {
private static final String BOAD= "android.intent.action.gmt.logupload";
private static final String ACTION_BOOT = "android.intent.action.BOOT_COMPLETED";
@Override
public void onReceive(Context context, Intent intent) {
String action=intent.getAction();
if(action.equals(BOAD)){
Log.i("test","=================receiver BOAD======");
}else if(action.equals(Intent.ACTION_BOOT_COMPLETED)){
Log.i("test","========receiver bootservice, start back service======");
Intent intentt = new Intent(context, UploadLogService.class);
context.startService(intentt);
}else if(action.equals("android.intent.action.QUICKBOOT_POWERON")){
Log.i("test","========1111111111111111111111111111111111======");
}
}
}
服务public class UploadLogService extends Service {
private String TAG="test";
private String BOARD_UPLOAD="android.intent.action.gmt.logupload";
private UploadLogReceiver receiver=new UploadLogReceiver(); @Override
public IBinder onBind(Intent intent) {
return null;
} @Override
public void onCreate() {
super.onCreate();
Log.i(TAG,"定时6小时执行===================");
IntentFilter intentFilter=new IntentFilter();
intentFilter.addAction(BOARD_UPLOAD);
registerReceiver(receiver,intentFilter);
} @Override
public void onDestroy() {
super.onDestroy();
unregisterReceiver(receiver);
}
}
解决方案 »
- 根据content://sms/inbox查询收件箱短信,模拟器可以,真机不行,为啥啊?
- android环境搭建问题,求高手支招!!!
- android系统input子系统keypad的问题~
- andrioid官方怎么没有SDK下载了,只有升级包?
- 做好的HTML5的页面怎么放入安卓项目中
- 求助 关于Base64解码的问题
- 子线程如何异步更新Fragment的UI界面
- android版主怎么也潜水不见了
- 如何侦测自己的APP被退到背景去?
- sdk nothing install怎么破?
- Android RecyclerView + drakeet.multitype 复杂布局实现瀑布流出现闪烁,留白的问题
- Android进行地图开发时,地图移动跟不上marker移动
1.可以是程序安装在disk中造成的。因为系统发出广播后才加载disk中的程序。
2.不知道从某个版本,你必须要手动运行下你的程序。这样是防止恶意程序。
3.广播一定要静态注册。
方法二: 保留原来的静态广播,但是加入Component参数
Intent intent =new Intent("test");
//参数一是你的包名,参数二是你的接收器的路径
intent.setComponent(new ComponentName("com.example.xlk","com.example.MyBroadCastReceiver"));
sendBroadcast( intent );
private static final String BOAD= "android.intent.action.gmt.logupload";
private static final String ACTION_BOOT = "android.intent.action.BOOT_COMPLETED";
@Override
public void onReceive(Context context, Intent intent) {
String action=intent.getAction();
if(action.equals(BOAD)){
Log.i("test","=================receiver BOAD======");
}else if(action.equals(Intent.ACTION_BOOT_COMPLETED)){
Log.i("test","========receiver bootservice, start back service======");
}else if(action.equals("android.intent.action.QUICKBOOT_POWERON")){
Log.i("test","========1111111111111111111111111111111111======");
}
}
}