Приемник изменения состояния вызова Android не работает после удаления последних приложений (Sumsung S6) - PullRequest
0 голосов
/ 29 октября 2018

Я пытаюсь получать события изменения состояния вызова (входящие, исходящие). В эмуляторе он действительно хорошо работает, но в устройстве работает только в запущенном состоянии приложения. Я пытался в Sumsung S6 , и если я удаляю последние приложения (смахивание), широковещательный приемник вообще не работает, как я могу заставить это работать? Спасибо за вашу помощь.

<receiver
            android:name=".utils.CallReceiver"
            android:directBootAware="true"
            android:enabled="true"
            android:exported="true"
            android:label="CallReceiver">
            <intent-filter android:priority="101">
                <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
                <!-- For pre-N devices -->
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
            <intent-filter android:priority="100">
                <action android:name="android.intent.action.PHONE_STATE" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
            </intent-filter>
        </receiver>

Это код приемника вещания

@Override
    public void onReceive(Context context, Intent intent) {
        Log.e("onCallStateChanged","intent state Detected");
        if (intent.getAction().equals("android.intent.action.NEW_OUTGOING_CALL")) {
            savedNumber = intent.getExtras().getString("android.intent.extra.PHONE_NUMBER");
        }else if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")){
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                ContextCompat.startForegroundService(context,new Intent(context, AppsLoggingService.class));
                Log.e("Broadcast","Oreo Boot_completed");
            } else {
                context.startService(new Intent(context, AppsLoggingService.class));
                Log.e("Broadcast","Boot_completed");
            }
        }else if (intent.getAction().equals("android.intent.action.PHONE_STATE")){
            String stateStr = intent.getExtras().getString(TelephonyManager.EXTRA_STATE);
            String number = intent.getExtras().getString(TelephonyManager.EXTRA_INCOMING_NUMBER);
            int state = 0;
            if(stateStr.equals(TelephonyManager.EXTRA_STATE_IDLE)){
                state = TelephonyManager.CALL_STATE_IDLE;
            }
            else if(stateStr.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)){
                state = TelephonyManager.CALL_STATE_OFFHOOK;
            }
            else if(stateStr.equals(TelephonyManager.EXTRA_STATE_RINGING)){
                state = TelephonyManager.CALL_STATE_RINGING;
            }
            onCallStateChanged(context, state, number);
        }
    }

Это стартовый код приемника вещания из действия


 @Override
        protected void onResume() {
            super.onResume();
            registerReceiver(call_boot_broadcast,intentFilter);
        }

  @Override
    protected void onPause() {
        unregisterReceiver(call_boot_broadcast);
        super.onPause();
    }

Это начальная часть приемника вещания из услуги

@Override
    public int onStartCommand(@Nullable Intent intent, int flags, int startId) {
        onTaskRemoved(intent);
//        registerScreenOffReceiver();
        m_ScreenOffReceiver= new CallReceiver();
        intentFilter = new IntentFilter(Intent.ACTION_SCREEN_OFF);
        // Add network connectivity change action.
        intentFilter.addAction("android.intent.action.BOOT_COMPLETED");
        intentFilter.addAction("android.intent.action.NEW_OUTGOING_CALL");
        intentFilter.addAction("android.intent.action.PHONE_STATE");
        // Set broadcast receiver priority.
        intentFilter.setPriority(100);

        this.registerReceiver(m_ScreenOffReceiver, intentFilter);
        Log.e("Apploging","Apploggingservice started");

        return START_STICKY;
    }

@Override
    public void onDestroy() {
        super.onDestroy();
        Log.e("Apploging","Apploggingservice destroyed");

        unregisterReceiver(m_ScreenOffReceiver);
    }
...