У меня есть вопрос, очень похожий на Вот этот, но его задали 6 лет назад. Я подумал, что, возможно, что-то изменилось.
В основном я не хочу уведомлять пользователя о потере сигнала. Я реализовал в нем класс, наследующий от метода PhoneStateListener и OnServiceStateChanged. Также у меня есть служба, которая работает в фоновом режиме и отслеживает изменения. Все работает нормально, пока включен экран.
Но, видимо, Android не вызывает OnServiceStateChanged при выключенном экране. Есть ли способ получить Android.Telephony.PhoneState напрямую из службы или, возможно, какой-то другой обходной путь?
Мой код пока что ниже:
@VicJordan, обновлено
Попробуйте создать класс 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 */
}
}
Разместите этот код Все работает нормально, пока включен экран.