当关闭最近的应用程序杀死应用程序进程时,广播接收器将被取消注册

时间:2015-12-16 06:50:46

标签: android service broadcastreceiver

在我的应用程序中,我正在尝试拨打电话时执行某些操作。出于此目的,我注册了一个带有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);

}

}

1 个答案:

答案 0 :(得分:1)

这是由于权限管理器,我的应用程序拒绝了Autostart。这就是为什么从最近的广播接收者清除应用程序之后也没有用。