Слушатель входящего звонка спит через пару часов - PullRequest
0 голосов
/ 24 мая 2018

В последние пару недель я сталкиваюсь с проблемой API-интерфейса диспетчера телефонии в Android - прослушиватель для входящего вызова на основе прослушивателя, начинающего запись и заканчивающего запись остановки вызова (процесс работает плавно)

ВЫПУСК
Проблема, с которой я сталкиваюсь, заключается в том, что на некоторых мобильных телефонах она работает все время, но на некоторых мобильных телефонах прослушиватель Broadcast менеджера телефонии перестает работать через несколько часов.После некоторых исследований я нашел решение, которое использует wake-lock для предотвращения перехода процессора в спящий режим, и я попытался это сделать, но тщетно.

   @Override
public void onReceive(Context context, Intent intent) {
//We listen to two intents.  The new outgoing call only tells us of an 
 //outgoing  call.  We use it to get the number.
    roPlantPrefs = RoPlantPrefs.getInstance(context);
    databaseHelper = new DatabaseHelper(context);
     //lastState = roPlantPrefs.getLastState();

    if (roPlantPrefs.getLogin()) {


        if (intent.getAction().equals("android.intent.action.NEW_OUTGOING_CALL")) {
            savedNumber = intent.getExtras().getString("android.intent.extra.PHONE_NUMBER");
        } else {

            roPlantPrefs = RoPlantPrefs.getInstance(context);
 //            if (!roPlantPrefs.getIsOnCall()) {

            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);
        }
    }


   //        }
}      

Я также использовал timer and alarm manger, но он работает максимум от 2 до 3часов, после чего слушатель перестает работать, любая помощь может быть оценена.

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

попробуйте это намерение установить, затем введите имя вашего приложения (не оптимизируйте) для SDK 23 и выше

 Intent intent = new Intent();
    String packageName = getPackageName();
    PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
    if (pm.isIgnoringBatteryOptimizations(packageName))
        intent.setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
    else {
        intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
        intent.setData(Uri.parse("package:" + packageName));
    }
    startActivity(intent);
0 голосов
/ 04 июня 2018

У меня была такая же проблема с телефонами Oppo, Vivo, Mi и т. Д., После удаления из недавних приложений приложение убивалось, даже сервисы убивались

Решение: я добавил разрешения на автозапуск, подобные этому, в моем приложении иэто сработало.

После решения этой проблемы мое приложение зависало / убивалось после некоторого времени работы в фоновом режиме из-за режима DOZE

Решение: для этого условия просто перейдите -> Настройки -> Battery Option и разрешите вашему приложению работать в фоновом режиме, если вы сделаете это, режим DOZE не повлияет на ваше приложение,

Cheers

...