在我的应用程序中,我正在尝试拨打电话时执行某些操作。出于此目的,我注册了一个带有ACTION_NEW_OUTGOING_CALL操作的braodcast接收器。它工作得很好但是当我通过最近的应用程序抽屉杀死应用程序时,App不再收到广播。如何重新注册广播。 这是我的代码: 在braodcast接收器:
@Override
public void onReceive(final Context context, Intent intent) {
this.mContext = context;
if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) {
number = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
o_GetLocation = new GetLocation(context);
Location location = o_GetLocation.getLocation();
String lat = null;
String longitutde = null;
if (null != location) {
lat = String.valueOf(location.getLatitude());
longitutde = String.valueOf(location.getLongitude());
}
String msg = "Called number: " + number + ", IMEI: " + getImei() + " Lat:"+lat + " Long:" + longitutde;
Log.d("TAG",msg);
Toast.makeText(mContext, msg, 200).show();
}
if (intent.getAction().equals("restartservice")) {
context.startService(new Intent(context.getApplicationContext(), BackgroundService.class));
Log.d("TAG", "restart");
}
在服务中:
@Override
public void onCreate() {
Log.d("TAG", "service oncreate");
HandlerThread thread = new HandlerThread("ServiceStartArguments");
thread.start();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d("TAG", "service started");
BroadcastRec reciever = new BroadcastRec();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("restartservice");
intentFilter.addAction(Intent.ACTION_NEW_OUTGOING_CALL);
registerReceiver(reciever, intentFilter);
// If we get killed, after returning from here, restart
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
// We don't provide binding, so return null
return null;
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d("TAG", "service destroy");
sendBroadcast(new Intent("restartservice"));
}
@SuppressLint("NewApi")
@Override
public void onTaskRemoved(Intent rootIntent) {
// TODO Auto-generated method stub
super.onTaskRemoved(rootIntent);
Log.d("TAG", "service onTaskRemoved");
sendBroadcast(new Intent("restartservice"));
}
MainActivity:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent(this, BackgroundService.class);
startService(intent);
}
}
答案 0 :(得分:1)
这是由于权限管理器,我的应用程序拒绝了Autostart。这就是为什么从最近的广播接收者清除应用程序之后也没有用。