当通过关闭最近的应用程序终止应用程序的进程时,广播接收器将被注销
When app's process is killed by closing recent apps, broadcast reciever is getting unregistered
在我的应用程序中,我正在尝试在拨出电话时执行某些操作。为此,我注册了一个 braodcast 接收器,其操作为 ACTION_NEW_OUTGOING_CALL。它工作得很好但是当我通过最近的应用程序抽屉杀死应用程序时,应用程序不再收到广播。如何重新注册广播。
这是我的代码:
在广播接收器中:
@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"));
}
主要活动:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent(this, BackgroundService.class);
startService(intent);
}
}
这是由于权限管理器导致我的应用程序自动启动被拒绝。这就是为什么从最近的广播接收器中清除应用程序后也无法正常工作的原因。
在我的应用程序中,我正在尝试在拨出电话时执行某些操作。为此,我注册了一个 braodcast 接收器,其操作为 ACTION_NEW_OUTGOING_CALL。它工作得很好但是当我通过最近的应用程序抽屉杀死应用程序时,应用程序不再收到广播。如何重新注册广播。 这是我的代码: 在广播接收器中:
@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"));
}
主要活动:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent(this, BackgroundService.class);
startService(intent);
}
}
这是由于权限管理器导致我的应用程序自动启动被拒绝。这就是为什么从最近的广播接收器中清除应用程序后也无法正常工作的原因。