簡體   English   中英

來電呼叫聽眾在幾個小時后睡覺

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM