[英]Incoming call listener sleeps after couple of hours
在过去的几周里,我面临着Android中的电话管理器API的问题 - 基于监听器开始录制的呼入监听器以及结束呼叫停止录制(流程正常工作)
问题
我面临的问题是,在一些手机中它一直在工作,但在一些手机中,电话管理器的广播听众在几个小时后就停止工作了。 经过一些研究,我找到了一个使用唤醒锁来防止CPU睡眠的解决方案,我尝试了这个但是徒劳无功。
@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个小时,然后听众停止工作,任何帮助都可以得到赞赏。
我从Oppo,Vivo,Mi等手机上遇到了同样的问题,从最近的应用程序中移除应用程序后,甚至服务被杀死
解决方案:我在我的应用程序中添加了这样的自动启动权限,并且它有效。
解决此问题后,由于DOZE模式,我的应用程序在后台运行一段时间后被冻结/杀死
解决方案:对于这种情况,只需转到 - >设置 - >电池选项,并允许您的应用在后台运行,如果这样做,DOZE模式不会影响您的应用,
干杯
尝试这个设置的意图然后把你的应用程序名称(不要优化)为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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.