【问题标题】:Incoming call listener sleeps after couple of hours来电听者在几个小时后睡觉
【发布时间】:2018-05-24 07:03:47
【问题描述】:

在过去的几周里,我在 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 个小时,然后监听器停止工作,任何帮助都将不胜感激。

【问题讨论】:

  • 您使用的是服务还是广播接收器?
  • 提及设备名称,我可能会回答您的问题
  • 我不明白您是说您在清单中使用 定义了广播,并且过了一段时间后您的广播没有收到通知有新来电?
  • 是的,这是最糟糕的

标签: android telephonymanager wakelock android-wake-lock


【解决方案1】:

我在 Oppo、Vivo、Mi 等手机上遇到了同样的问题,从最近的应用程序中删除后,应用程序被杀死,甚至服务也被杀死

解决方案:我在我的应用程序中添加了这样的自动启动权限并且它有效。

解决此问题后,由于打盹模式,我的应用在后台运行一段时间后被冻结/杀死

解决方案:对于这种情况,只需进入->设置->电池选项,并让您的应用程序在后台运行,如果您这样做,打盹模式不会影响您的应用程序,

干杯

【讨论】:

  • 在 Q-Mobile 中没有这样的设置可用>设置 -> 电池选项,并允许您的应用在后台运行
  • 在每个 Android 设备中,您都会看到电池选项,并且您可以让您的应用在后台运行“ -> 设置 -> 电池选项 > 电池优化/节电/过度节电/节能”允许这些选项中的应用在后台运行。您将能够在 Marshmellow 设备上方看到上述设置
  • 如果这能解决您的问题,请接受/支持答案
【解决方案2】:

尝试这种设置意图,然后输入您的应用程序名称(不要优化) 对于 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);

【讨论】:

  • 不要在清单中忘记这一点
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-19
  • 2019-04-14
  • 2013-04-29
  • 2011-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多