В последние пару недель я сталкиваюсь с проблемой 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часов, после чего слушатель перестает работать, любая помощь может быть оценена.