Как получить Android.Telephony.PhoneState при выключенном экране?

У меня есть вопрос, очень похожий на Вот этот, но его задали 6 лет назад. Я подумал, что, возможно, что-то изменилось.

В основном я не хочу уведомлять пользователя о потере сигнала. Я реализовал в нем класс, наследующий от метода PhoneStateListener и OnServiceStateChanged. Также у меня есть служба, которая работает в фоновом режиме и отслеживает изменения. Все работает нормально, пока включен экран.

Но, видимо, Android не вызывает OnServiceStateChanged при выключенном экране. Есть ли способ получить Android.Telephony.PhoneState напрямую из службы или, возможно, какой-то другой обходной путь?

Мой код пока что ниже:

PhoneStateListener

Услуга

Разместите этот код Все работает нормально, пока включен экран.

Vikasdeep Singh 27.06.2018 09:44

@VicJordan, обновлено

obywan 27.06.2018 10:00
0
2
126
2

Ответы 2

Попробуйте создать класс BroadcastReciever

https://developer.android.com/guide/components/broadcasts

и измените файл AndroidManifest.xml, я думаю, вам требуется следующее разрешение

<uses-permission android:name = "android.permission.READ_PHONE_STATE"/>

После создания класса Broadcast Receiver вставьте следующий фрагмент кода в AndroidManifest.xml

    <receiver android:name = "//BroadcastReceiver Class Name" android:enabled = "true">
        <intent-filter>
            <action android:name = "android.intent.action.PHONE_STATE">

            </action>
        </intent-filter>
    </receiver> 

AndroidManifest.xml файл, я думаю, вам требуется следующее разрешение

<uses-permission
            android:name = "android.permission.MODIFY_PHONE_STATE"
            tools:ignore = "ProtectedPermissions" />
        <uses-permission android:name = "android.permission.CALL_PHONE" /> 

создание класса Broadcast Receiver в AndroidManifest.xml

 <receiver android:name = ".services.Blocker">
            <intent-filter android:priority = "1000">
                <action android:name = "android.intent.action.PHONE_STATE" />
            </intent-filter>
        </receiver>

Blocker.java

public class Blocker extends BroadcastReceiver {
@Override
    public void onReceive(Context context, Intent intent) {
     /* write your code here */
    }
}

Другие вопросы по теме