Android 服务死掉然后自动重启并且工作正常

发布于 2024-12-03 14:39:37 字数 20775 浏览 2 评论 0原文

我是 Android 开发世界和 Java 开发领域的新手,我致力于开发在“X”分钟后挂断电话的应用程序。

我做了一个 BroadcastReceiver 来捕获新呼叫,然后调用一个休眠“X”分钟的服务,然后挂断呼叫。

我的问题是,当 BradcastReceiver 启动服务时,服务会运行,但大约 10-12 秒后它就会终止,然后自动启动并正常完成。

这是我的代码:

BroadcastReceiver

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.TelephonyManager;

public class PhoneCallReceiverOutgoing extends BroadcastReceiver {

public void onReceive(Context context, Intent intent) {

    // Get extra values
    String dialedNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER).toString();

    if (dialedNumber != null) {

        System.out.println("|#| **** PhoneCallReceiverOut - New call to: " + dialedNumber + " **** |#|");
        System.out.println("|#| **** PhoneCallReceiverOut - Se inicia el Servicio **** |#|");
        //Intent serviceIntent = new Intent(context,PhoneCallService.class);
        Intent serviceIntent = new Intent();
        serviceIntent.setClass(context,PhoneCallService.class);
            context.startService(serviceIntent);
            System.out.println("|#| **** PhoneCallReceiverOut - Saliendo del Receiber **** |#|");                       
        }
    }
}

这是我的服务:

import java.lang.reflect.Method;

import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;
import android.os.SystemClock;
import android.telephony.TelephonyManager;

import com.android.internal.telephony.ITelephony;

public class PhoneCallService extends Service {

@Override
public IBinder onBind(Intent arg0) {
    // TODO Auto-generated method stub
    System.out.println("|#| **** PhoneCallService - onBind **** |#|");
    return null;
}


public void onCreate() {
    // Do something
    super.onCreate();
    System.out.println("Service init");
}

public void onStart(Intent intent, int serviceId) {

    super.onStart(intent, serviceId);
    System.out.println("|#| **** PhoneCallService - Starting service **** |#|");

    // Testing with 2 minutes
    int minutes = 2,seconds = 0;
    seconds = minutes * 60000;
    System.out.println("|#| **** PhoneCallService - End call in : " + minutes + " minutes ( " + seconds + " seconds) **** |#|");
    SystemClock.sleep(seconds);

    TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
    try {
        Class c = Class.forName(tm.getClass().getName());
        Method m = c.getDeclaredMethod("getITelephony");
        m.setAccessible(true);
        ITelephony telephonyService = (ITelephony)m.invoke(tm);
        telephonyService.endCall();             
    } catch(Exception e) { e.printStackTrace(); }

    stopSelf();
}


public void onResume() {
    System.out.println("|#| **** PhoneCallService - onResume() **** |#|");

}
@Override
public void onDestroy() {
    // TODO Auto-generated method stub
    super.onDestroy();
    System.out.println("|#| **** PhoneCallService - Finishing service **** |#|");

}
}

这是我在 logcat 中看到的日志:

I/ActivityManager(   59): Starting activity: Intent { act=android.intent.action.CALL_PRIVILEGED dat=tel:88642536 cmp=com.android.phone/.PrivilegedOutgoingCallBroadcaster }
V/OutgoingCallBroadcaster(  121): onCreate: this = com.android.phone.OutgoingCallBroadcaster@44f70190, icicle = null
V/OutgoingCallBroadcaster(  121):  - getIntent() = Intent { act=android.intent.action.CALL_PRIVILEGED dat=tel:88642536 cmp=com.android.phone/.PrivilegedOutgoingCallBroadcaster }
V/OutgoingCallBroadcaster(  121):  - configuration = { scale=1.0 imsi=310/260 loc=en_US touch=3 keys=2/1/2 nav=3/1 orien=1 layout=34 uiMode=17 seq=3}
D/PhoneApp(  121): pulse screen lock
D/PhoneUtils(  121): checkAndCopyPhoneProviderExtras: some or all extras are missing.
V/OutgoingCallBroadcaster(  121): Broadcasting intent Intent { act=android.intent.action.NEW_OUTGOING_CALL (has extras) }.
I/System.out(  597): |#| **** PhoneCallReceiverOut - New call to: 88642536 **** |#|
I/System.out(  597): |#| **** PhoneCallReceiverOut - Se inicia el Servicio **** |#|
I/System.out(  597): |#| **** PhoneCallReceiverOut - Saliendo del Receiber **** |#|
I/System.out(  597): Service init
V/OutgoingCallReceiver(  121): doReceive: Intent { act=android.intent.action.NEW_OUTGOING_CALL (has extras) }
V/OutgoingCallReceiver(  121): CALL to 88642536 proceeding.
D/PhoneUtils(  121): checkAndCopyPhoneProviderExtras: some or all extras are missing.
I/System.out(  597): |#| **** PhoneCallService - Starting service **** |#|
I/System.out(  597): |#| **** PhoneCallService - End call in : 2 minutes ( 120000 seconds) **** |#|
V/OutgoingCallReceiver(  121): doReceive(): calling startActivity: Intent { act=android.intent.action.CALL dat=tel:88642536 flg=0x10000000 cmp=com.android.phone/.InCallScreen (has extras) }
I/ActivityManager(   59): Starting activity: Intent { act=android.intent.action.CALL dat=tel:88642536 flg=0x10000000 cmp=com.android.phone/.InCallScreen (has extras) }
D/InCallScreen(  121): onNewIntent: intent=Intent { act=android.intent.action.CALL dat=tel:88642536 flg=0x10c00000 cmp=com.android.phone/.InCallScreen (has extras) }
D/InCallScreen(  121): internalResolveIntent: action=android.intent.action.CALL
I/AudioService(   59):  AudioFocus  requestAudioFocus() from AudioFocus_For_Phone_Ring_And_Calls
D/AudioHardwareInterface(   34): setMode(IN_CALL)
D/InCallScreen(  121): onResume()...
D/PhoneApp(  121): disable status bar
D/PhoneApp(  121): StatusBarManager.DISABLE_EXPAND
D/StatusBar(   59): DISABLE_EXPAND: yes
D/InCallScreen(  121): - onResume: initial status = SUCCESS
D/InCallScreen(  121): setInCallScreenMode: NORMAL
D/InCallScreen(  121): syncWithPhoneState()...
D/PhoneUtils(  121): dumpCallState():
D/PhoneUtils(  121): - Phone: Handler{44ec0e90}, name = GSM, state = OFFHOOK
D/PhoneUtils(  121):   - FG call: DIALING isAlive true isRinging false isDialing true isIdle false hasConnections true
D/PhoneUtils(  121):   - BG call: IDLE isAlive false isRinging false isDialing false isIdle true hasConnections false
D/PhoneUtils(  121):   - RINGING call: IDLE isAlive false isRinging false isDialing false isIdle true hasConnections false
D/PhoneUtils(  121):   - hasRingingCall false hasActiveCall true hasHoldingCall false allLinesTaken false
D/PhoneUtils(  121):   - Ringer state: false
D/InCallScreen(  121): updateScreen()...
D/InCallScreen(  121): - updateScreen: updating the in-call UI...
D/PhoneApp(  121): updateWakeState: callscreen true, dialer false, speaker false...
D/PhoneApp(  121): updateWakeState: keepScreenOn = true (isRinging false, isDialing true, showingDisc false)
D/CallNotifier(  121): stopRing()... (OFFHOOK state)
D/Ringer  (  121): stopRing()...
D/Ringer  (  121): - stopRing: null mRingHandler!
D/InCallScreen(  121): onPhoneStateChanged()...
D/InCallScreen(  121): updateScreen()...
D/InCallScreen(  121): - updateScreen: updating the in-call UI...
D/PhoneApp(  121): updateWakeState: callscreen true, dialer false, speaker false...
D/PhoneApp(  121): updateWakeState: keepScreenOn = true (isRinging false, isDialing true, showingDisc false)
D/CallNotifier(  121): stopRing()... (OFFHOOK state)
D/Ringer  (  121): stopRing()...
D/Ringer  (  121): - stopRing: null mRingHandler!
D/InCallScreen(  121): onPhoneStateChanged()...
D/InCallScreen(  121): updateScreen()...
D/InCallScreen(  121): - updateScreen: updating the in-call UI...
D/PhoneApp(  121): updateWakeState: callscreen true, dialer false, speaker false...
D/PhoneApp(  121): updateWakeState: keepScreenOn = true (isRinging false, isDialing true, showingDisc false)
D/CallNotifier(  121): stopRing()... (OFFHOOK state)
D/Ringer  (  121): stopRing()...
D/Ringer  (  121): - stopRing: null mRingHandler!
D/InCallScreen(  121): onPhoneStateChanged()...
D/InCallScreen(  121): updateScreen()...
D/InCallScreen(  121): - updateScreen: updating the in-call UI...
D/PhoneApp(  121): updateWakeState: callscreen true, dialer false, speaker false...
D/PhoneApp(  121): updateWakeState: keepScreenOn = true (isRinging false, isDialing true, showingDisc false)
D/CallNotifier(  121): stopRing()... (OFFHOOK state)
D/Ringer  (  121): stopRing()...
D/Ringer  (  121): - stopRing: null mRingHandler!
D/InCallScreen(  121): onPhoneStateChanged()...
D/InCallScreen(  121): updateScreen()...
D/InCallScreen(  121): - updateScreen: updating the in-call UI...
D/PhoneApp(  121): updateWakeState: callscreen true, dialer false, speaker false...
D/PhoneApp(  121): updateWakeState: keepScreenOn = true (isRinging false, isDialing true, showingDisc false)
W/InputManagerService(   59): Starting input on non-focused client com.android.internal.view.IInputMethodClient$Stub$Proxy@44fb1e78 (uid=10000 pid=160)
D/CallNotifier(  121): stopRing()... (OFFHOOK state)
D/Ringer  (  121): stopRing()...
D/Ringer  (  121): - stopRing: null mRingHandler!
D/InCallScreen(  121): onPhoneStateChanged()...
D/InCallScreen(  121): updateScreen()...
D/InCallScreen(  121): - updateScreen: updating the in-call UI...
D/PhoneApp(  121): updateWakeState: callscreen true, dialer false, speaker false...
D/PhoneApp(  121): updateWakeState: keepScreenOn = false (isRinging false, isDialing false, showingDisc false)
W/ActivityManager(   59): Timeout of broadcast BroadcastRecord{44ffa778 android.intent.action.PHONE_STATE} - receiver=android.os.BinderProxy@4512e960
W/ActivityManager(   59): Receiver during timeout: ResolveInfo{450dc090 com.shwordfishland.calltimecontrol.PhoneCallReceiver p=0 o=0 m=0x108000}
I/Process (   59): Sending signal. PID: 597 SIG: 3
I/dalvikvm(  597): threadid=3: reacting to signal 3
I/dalvikvm(  597): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 59 SIG: 3
I/dalvikvm(   59): threadid=3: reacting to signal 3
I/dalvikvm(   59): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 117 SIG: 3
I/dalvikvm(  117): threadid=3: reacting to signal 3
I/dalvikvm(  117): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 121 SIG: 3
I/dalvikvm(  121): threadid=3: reacting to signal 3
I/dalvikvm(  121): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 160 SIG: 3
I/dalvikvm(  160): threadid=3: reacting to signal 3
I/dalvikvm(  160): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 263 SIG: 3
I/dalvikvm(  263): threadid=3: reacting to signal 3
I/dalvikvm(  263): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 254 SIG: 3
I/dalvikvm(  254): threadid=3: reacting to signal 3
I/dalvikvm(  254): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 461 SIG: 3
I/dalvikvm(  461): threadid=3: reacting to signal 3
I/dalvikvm(  461): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 132 SIG: 3
I/dalvikvm(  132): threadid=3: reacting to signal 3
I/dalvikvm(  132): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 192 SIG: 3
I/dalvikvm(  192): threadid=3: reacting to signal 3
I/dalvikvm(  192): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 166 SIG: 3
I/dalvikvm(  166): threadid=3: reacting to signal 3
I/dalvikvm(  166): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 229 SIG: 3
I/dalvikvm(  229): threadid=3: reacting to signal 3
I/dalvikvm(  229): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 219 SIG: 3
I/dalvikvm(  219): threadid=3: reacting to signal 3
I/dalvikvm(  219): Wrote stack traces to '/data/anr/traces.txt'
E/ActivityManager(   59): ANR in com.shwordfishland.calltimecontrol
E/ActivityManager(   59): Reason: Broadcast of Intent { act=android.intent.action.PHONE_STATE flg=0x20000000 cmp=com.shwordfishland.calltimecontrol/.PhoneCallReceiver (has extras) }
E/ActivityManager(   59): Load: 0.7 / 0.22 / 0.18
E/ActivityManager(   59): CPU usage from 28840ms to 86ms ago:
E/ActivityManager(   59):   system_server: 20% = 14% user + 5% kernel / faults: 1840 minor
E/ActivityManager(   59):   m.android.phone: 6% = 5% user + 1% kernel / faults: 867 minor
E/ActivityManager(   59):   adbd: 3% = 0% user + 3% kernel / faults: 1 minor
E/ActivityManager(   59):   d.process.acore: 3% = 2% user + 0% kernel / faults: 540 minor
E/ActivityManager(   59):   logcat: 0% = 0% user + 0% kernel / faults: 4 minor
E/ActivityManager(   59):   mediaserver: 0% = 0% user + 0% kernel / faults: 11 minor
E/ActivityManager(   59):   d.process.media: 0% = 0% user + 0% kernel / faults: 47 minor
E/ActivityManager(   59):   ronsoft.openwnn: 0% = 0% user + 0% kernel / faults: 30 minor
E/ActivityManager(   59):   id.defcontainer: 0% = 0% user + 0% kernel / faults: 47 minor
E/ActivityManager(   59):   qemud: 0% = 0% user + 0% kernel
E/ActivityManager(   59):   ndroid.launcher: 0% = 0% user + 0% kernel / faults: 43 minor
E/ActivityManager(   59):   m.android.email: 0% = 0% user + 0% kernel / faults: 47 minor
E/ActivityManager(   59):   .quicksearchbox: 0% = 0% user + 0% kernel / faults: 45 minor
E/ActivityManager(   59):   com.svox.pico: 0% = 0% user + 0% kernel / faults: 43 minor
E/ActivityManager(   59):   ndroid.settings: 0% = 0% user + 0% kernel / faults: 43 minor
E/ActivityManager(   59):   roid.alarmclock: 0% = 0% user + 0% kernel / faults: 43 minor
E/ActivityManager(   59):   zygote: 0% = 0% user + 0% kernel / faults: 58 minor
E/ActivityManager(   59):   servicemanager: 0% = 0% user + 0% kernel / faults: 5 minor
E/ActivityManager(   59):   rild: 0% = 0% user + 0% kernel
E/ActivityManager(   59):  +calltimecontrol: 0% = 0% user + 0% kernel
E/ActivityManager(   59):  +calltimecontrol: 0% = 0% user + 0% kernel
E/ActivityManager(   59): TOTAL: 39% = 25% user + 14% kernel + 0% softirq
I/Process (   59): Sending signal. PID: 597 SIG: 9
I/ActivityManager(   59): Process com.shwordfishland.calltimecontrol (pid 597) has died.
W/ActivityManager(   59): Scheduling restart of crashed service com.shwordfishland.calltimecontrol/.PhoneCallService in 22608ms
D/dalvikvm(   59): GC_FOR_MALLOC freed 4066 objects / 612200 bytes in 171ms
I/dalvikvm-heap(   59): Grow heap (frag case) to 6.336MB for 168632-byte allocation
D/dalvikvm(   59): GC_FOR_MALLOC freed 182 objects / 8984 bytes in 187ms
D/dalvikvm(  160): GC_EXPLICIT freed 2956 objects / 202280 bytes in 147ms
I/ActivityManager(   59): Start proc com.shwordfishland.calltimecontrol for service com.shwordfishland.calltimecontrol/.PhoneCallService: pid=604 uid=10037 gids={1015}
I/System.out(  604): Service init
I/System.out(  604): |#| **** PhoneCallService - Starting service **** |#|
I/System.out(  604): |#| **** PhoneCallService - End call in : 2 minutes ( 120000 seconds) **** |#|
W/ActivityManager(   59): Timeout executing service: ServiceRecord{450eafc8 com.shwordfishland.calltimecontrol/.PhoneCallService}
I/Process (   59): Sending signal. PID: 604 SIG: 3
I/dalvikvm(  604): threadid=3: reacting to signal 3
I/dalvikvm(  604): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 59 SIG: 3
I/dalvikvm(   59): threadid=3: reacting to signal 3
I/dalvikvm(   59): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 117 SIG: 3
I/dalvikvm(  117): threadid=3: reacting to signal 3
I/dalvikvm(  117): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 121 SIG: 3
I/dalvikvm(  121): threadid=3: reacting to signal 3
I/dalvikvm(  121): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 160 SIG: 3
I/dalvikvm(  160): threadid=3: reacting to signal 3
I/dalvikvm(  160): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 263 SIG: 3
I/dalvikvm(  263): threadid=3: reacting to signal 3
I/dalvikvm(  263): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 254 SIG: 3
I/dalvikvm(  254): threadid=3: reacting to signal 3
I/dalvikvm(  254): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 461 SIG: 3
I/dalvikvm(  461): threadid=3: reacting to signal 3
I/dalvikvm(  461): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 132 SIG: 3
I/dalvikvm(  132): threadid=3: reacting to signal 3
I/dalvikvm(  132): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 192 SIG: 3
I/dalvikvm(  192): threadid=3: reacting to signal 3
I/dalvikvm(  192): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 166 SIG: 3
I/dalvikvm(  166): threadid=3: reacting to signal 3
I/dalvikvm(  166): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 229 SIG: 3
I/dalvikvm(  229): threadid=3: reacting to signal 3
I/dalvikvm(  229): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 219 SIG: 3
I/dalvikvm(  219): threadid=3: reacting to signal 3
I/dalvikvm(  219): Wrote stack traces to '/data/anr/traces.txt'
E/ActivityManager(   59): ANR in com.shwordfishland.calltimecontrol
E/ActivityManager(   59): Reason: Executing service com.shwordfishland.calltimecontrol/.PhoneCallService
E/ActivityManager(   59): Load: 0.49 / 0.23 / 0.19
E/ActivityManager(   59): CPU usage from 44174ms to 115ms ago:
E/ActivityManager(   59):   system_server: 11% = 8% user + 3% kernel / faults: 249 minor
E/ActivityManager(   59):   m.android.phone: 4% = 3% user + 0% kernel / faults: 31 minor
E/ActivityManager(   59):   adbd: 0% = 0% user + 0% kernel
E/ActivityManager(   59):   d.process.acore: 0% = 0% user + 0% kernel / faults: 66 minor
E/ActivityManager(   59):   logcat: 0% = 0% user + 0% kernel
E/ActivityManager(   59):   d.process.media: 0% = 0% user + 0% kernel / faults: 9 minor
E/ActivityManager(   59):   id.defcontainer: 0% = 0% user + 0% kernel / faults: 9 minor
E/ActivityManager(   59):   zygote: 0% = 0% user + 0% kernel / faults: 37 minor
E/ActivityManager(   59):   m.android.email: 0% = 0% user + 0% kernel / faults: 8 minor
E/ActivityManager(   59):   ndroid.launcher: 0% = 0% user + 0% kernel / faults: 7 minor
E/ActivityManager(   59):   .quicksearchbox: 0% = 0% user + 0% kernel / faults: 8 minor
E/ActivityManager(   59):   com.svox.pico: 0% = 0% user + 0% kernel / faults: 7 minor
E/ActivityManager(   59):   ndroid.settings: 0% = 0% user + 0% kernel / faults: 7 minor
E/ActivityManager(   59):   qemud: 0% = 0% user + 0% kernel
E/ActivityManager(   59):   ronsoft.openwnn: 0% = 0% user + 0% kernel / faults: 7 minor
E/ActivityManager(   59):   roid.alarmclock: 0% = 0% user + 0% kernel / faults: 7 minor
E/ActivityManager(   59):  +calltimecontrol: 0% = 0% user + 0% kernel
E/ActivityManager(   59):  +calltimecontrol: 0% = 0% user + 0% kernel
E/ActivityManager(   59): TOTAL: 18% = 12% user + 5% kernel + 0% irq + 0% softirq
I/Process (   59): Sending signal. PID: 604 SIG: 9
I/ActivityManager(   59): Process com.shwordfishland.calltimecontrol (pid 604) has died.
W/ActivityManager(   59): Scheduling restart of crashed service com.shwordfishland.calltimecontrol/.PhoneCallService in 90432ms
D/dalvikvm(   59): GC_FOR_MALLOC freed 1819 objects / 820856 bytes in 157ms
D/CallNotifier(  121): stopRing()... (OFFHOOK state)
D/Ringer  (  121): stopRing()...
D/Ringer  (  121): - stopRing: null mRingHandler!
D/InCallScreen(  121): onPhoneStateChanged()...
D/InCallScreen(  121): updateScreen()...
D/InCallScreen(  121): - updateScreen: updating the in-call UI...
D/PhoneApp(  121): updateWakeState: callscreen true, dialer false, speaker false...
D/PhoneApp(  121): updateWakeState: keepScreenOn = true (isRinging false, isDialing false, showingDisc true)
I/AudioService(   59):  AudioFocus  abandonAudioFocus() from AudioFocus_For_Phone_Ring_And_Calls
D/CallNotifier(  121): DISCONNECT
D/CallNotifier(  121): - onDisconnect: cause = LOCAL, incoming = false, date = 1315611026140
I/ActivityManager(   59): Start proc com.shwordfishland.calltimecontrol for broadcast com.shwordfishland.calltimecontrol/.PhoneCallReceiver: pid=611 uid=10037 gids={1015}
D/CallNotifier(  121): stopRing()... (onDisconnect)
D/Ringer  (  121): stopRing()...
D/Ringer  (  121): - stopRing: null mRingHandler!
D/CallNotifier(  121): - onDisconnect(): logNumber set to: 88642536
D/CallNotifier(  121): - getPresentation(): ignoring connection's presentation: 1
D/CallNotifier(  121): - getPresentation: presentation: 1
D/InCallScreen(  121): onDisconnect:  incoming: false state: DISCONNECTED post dial state: COMPLETE, cause=LOCAL

我不确定这是最好的方法,但这是我用有限的知识做到的。

非常感谢任何帮助或建议。

此致。

JR

I'm new in the awesome Android development world and also in Java and I'm tying to develop and applications that hang a call after "X" minutes.

I did an BroadcastReceiver to catch the new calls and then call a service that sleep "X" minutes and then hang the call.

My issue is that when the BradcastReceiver start the service, the service run but after about 10-12 seconds it's died then automatically is started finished fine.

This is my code:

BroadcastReceiver

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.TelephonyManager;

public class PhoneCallReceiverOutgoing extends BroadcastReceiver {

public void onReceive(Context context, Intent intent) {

    // Get extra values
    String dialedNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER).toString();

    if (dialedNumber != null) {

        System.out.println("|#| **** PhoneCallReceiverOut - New call to: " + dialedNumber + " **** |#|");
        System.out.println("|#| **** PhoneCallReceiverOut - Se inicia el Servicio **** |#|");
        //Intent serviceIntent = new Intent(context,PhoneCallService.class);
        Intent serviceIntent = new Intent();
        serviceIntent.setClass(context,PhoneCallService.class);
            context.startService(serviceIntent);
            System.out.println("|#| **** PhoneCallReceiverOut - Saliendo del Receiber **** |#|");                       
        }
    }
}

This is my service:

import java.lang.reflect.Method;

import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;
import android.os.SystemClock;
import android.telephony.TelephonyManager;

import com.android.internal.telephony.ITelephony;

public class PhoneCallService extends Service {

@Override
public IBinder onBind(Intent arg0) {
    // TODO Auto-generated method stub
    System.out.println("|#| **** PhoneCallService - onBind **** |#|");
    return null;
}


public void onCreate() {
    // Do something
    super.onCreate();
    System.out.println("Service init");
}

public void onStart(Intent intent, int serviceId) {

    super.onStart(intent, serviceId);
    System.out.println("|#| **** PhoneCallService - Starting service **** |#|");

    // Testing with 2 minutes
    int minutes = 2,seconds = 0;
    seconds = minutes * 60000;
    System.out.println("|#| **** PhoneCallService - End call in : " + minutes + " minutes ( " + seconds + " seconds) **** |#|");
    SystemClock.sleep(seconds);

    TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
    try {
        Class c = Class.forName(tm.getClass().getName());
        Method m = c.getDeclaredMethod("getITelephony");
        m.setAccessible(true);
        ITelephony telephonyService = (ITelephony)m.invoke(tm);
        telephonyService.endCall();             
    } catch(Exception e) { e.printStackTrace(); }

    stopSelf();
}


public void onResume() {
    System.out.println("|#| **** PhoneCallService - onResume() **** |#|");

}
@Override
public void onDestroy() {
    // TODO Auto-generated method stub
    super.onDestroy();
    System.out.println("|#| **** PhoneCallService - Finishing service **** |#|");

}
}

And this is the log that I saw in logcat:

I/ActivityManager(   59): Starting activity: Intent { act=android.intent.action.CALL_PRIVILEGED dat=tel:88642536 cmp=com.android.phone/.PrivilegedOutgoingCallBroadcaster }
V/OutgoingCallBroadcaster(  121): onCreate: this = com.android.phone.OutgoingCallBroadcaster@44f70190, icicle = null
V/OutgoingCallBroadcaster(  121):  - getIntent() = Intent { act=android.intent.action.CALL_PRIVILEGED dat=tel:88642536 cmp=com.android.phone/.PrivilegedOutgoingCallBroadcaster }
V/OutgoingCallBroadcaster(  121):  - configuration = { scale=1.0 imsi=310/260 loc=en_US touch=3 keys=2/1/2 nav=3/1 orien=1 layout=34 uiMode=17 seq=3}
D/PhoneApp(  121): pulse screen lock
D/PhoneUtils(  121): checkAndCopyPhoneProviderExtras: some or all extras are missing.
V/OutgoingCallBroadcaster(  121): Broadcasting intent Intent { act=android.intent.action.NEW_OUTGOING_CALL (has extras) }.
I/System.out(  597): |#| **** PhoneCallReceiverOut - New call to: 88642536 **** |#|
I/System.out(  597): |#| **** PhoneCallReceiverOut - Se inicia el Servicio **** |#|
I/System.out(  597): |#| **** PhoneCallReceiverOut - Saliendo del Receiber **** |#|
I/System.out(  597): Service init
V/OutgoingCallReceiver(  121): doReceive: Intent { act=android.intent.action.NEW_OUTGOING_CALL (has extras) }
V/OutgoingCallReceiver(  121): CALL to 88642536 proceeding.
D/PhoneUtils(  121): checkAndCopyPhoneProviderExtras: some or all extras are missing.
I/System.out(  597): |#| **** PhoneCallService - Starting service **** |#|
I/System.out(  597): |#| **** PhoneCallService - End call in : 2 minutes ( 120000 seconds) **** |#|
V/OutgoingCallReceiver(  121): doReceive(): calling startActivity: Intent { act=android.intent.action.CALL dat=tel:88642536 flg=0x10000000 cmp=com.android.phone/.InCallScreen (has extras) }
I/ActivityManager(   59): Starting activity: Intent { act=android.intent.action.CALL dat=tel:88642536 flg=0x10000000 cmp=com.android.phone/.InCallScreen (has extras) }
D/InCallScreen(  121): onNewIntent: intent=Intent { act=android.intent.action.CALL dat=tel:88642536 flg=0x10c00000 cmp=com.android.phone/.InCallScreen (has extras) }
D/InCallScreen(  121): internalResolveIntent: action=android.intent.action.CALL
I/AudioService(   59):  AudioFocus  requestAudioFocus() from AudioFocus_For_Phone_Ring_And_Calls
D/AudioHardwareInterface(   34): setMode(IN_CALL)
D/InCallScreen(  121): onResume()...
D/PhoneApp(  121): disable status bar
D/PhoneApp(  121): StatusBarManager.DISABLE_EXPAND
D/StatusBar(   59): DISABLE_EXPAND: yes
D/InCallScreen(  121): - onResume: initial status = SUCCESS
D/InCallScreen(  121): setInCallScreenMode: NORMAL
D/InCallScreen(  121): syncWithPhoneState()...
D/PhoneUtils(  121): dumpCallState():
D/PhoneUtils(  121): - Phone: Handler{44ec0e90}, name = GSM, state = OFFHOOK
D/PhoneUtils(  121):   - FG call: DIALING isAlive true isRinging false isDialing true isIdle false hasConnections true
D/PhoneUtils(  121):   - BG call: IDLE isAlive false isRinging false isDialing false isIdle true hasConnections false
D/PhoneUtils(  121):   - RINGING call: IDLE isAlive false isRinging false isDialing false isIdle true hasConnections false
D/PhoneUtils(  121):   - hasRingingCall false hasActiveCall true hasHoldingCall false allLinesTaken false
D/PhoneUtils(  121):   - Ringer state: false
D/InCallScreen(  121): updateScreen()...
D/InCallScreen(  121): - updateScreen: updating the in-call UI...
D/PhoneApp(  121): updateWakeState: callscreen true, dialer false, speaker false...
D/PhoneApp(  121): updateWakeState: keepScreenOn = true (isRinging false, isDialing true, showingDisc false)
D/CallNotifier(  121): stopRing()... (OFFHOOK state)
D/Ringer  (  121): stopRing()...
D/Ringer  (  121): - stopRing: null mRingHandler!
D/InCallScreen(  121): onPhoneStateChanged()...
D/InCallScreen(  121): updateScreen()...
D/InCallScreen(  121): - updateScreen: updating the in-call UI...
D/PhoneApp(  121): updateWakeState: callscreen true, dialer false, speaker false...
D/PhoneApp(  121): updateWakeState: keepScreenOn = true (isRinging false, isDialing true, showingDisc false)
D/CallNotifier(  121): stopRing()... (OFFHOOK state)
D/Ringer  (  121): stopRing()...
D/Ringer  (  121): - stopRing: null mRingHandler!
D/InCallScreen(  121): onPhoneStateChanged()...
D/InCallScreen(  121): updateScreen()...
D/InCallScreen(  121): - updateScreen: updating the in-call UI...
D/PhoneApp(  121): updateWakeState: callscreen true, dialer false, speaker false...
D/PhoneApp(  121): updateWakeState: keepScreenOn = true (isRinging false, isDialing true, showingDisc false)
D/CallNotifier(  121): stopRing()... (OFFHOOK state)
D/Ringer  (  121): stopRing()...
D/Ringer  (  121): - stopRing: null mRingHandler!
D/InCallScreen(  121): onPhoneStateChanged()...
D/InCallScreen(  121): updateScreen()...
D/InCallScreen(  121): - updateScreen: updating the in-call UI...
D/PhoneApp(  121): updateWakeState: callscreen true, dialer false, speaker false...
D/PhoneApp(  121): updateWakeState: keepScreenOn = true (isRinging false, isDialing true, showingDisc false)
D/CallNotifier(  121): stopRing()... (OFFHOOK state)
D/Ringer  (  121): stopRing()...
D/Ringer  (  121): - stopRing: null mRingHandler!
D/InCallScreen(  121): onPhoneStateChanged()...
D/InCallScreen(  121): updateScreen()...
D/InCallScreen(  121): - updateScreen: updating the in-call UI...
D/PhoneApp(  121): updateWakeState: callscreen true, dialer false, speaker false...
D/PhoneApp(  121): updateWakeState: keepScreenOn = true (isRinging false, isDialing true, showingDisc false)
W/InputManagerService(   59): Starting input on non-focused client com.android.internal.view.IInputMethodClient$Stub$Proxy@44fb1e78 (uid=10000 pid=160)
D/CallNotifier(  121): stopRing()... (OFFHOOK state)
D/Ringer  (  121): stopRing()...
D/Ringer  (  121): - stopRing: null mRingHandler!
D/InCallScreen(  121): onPhoneStateChanged()...
D/InCallScreen(  121): updateScreen()...
D/InCallScreen(  121): - updateScreen: updating the in-call UI...
D/PhoneApp(  121): updateWakeState: callscreen true, dialer false, speaker false...
D/PhoneApp(  121): updateWakeState: keepScreenOn = false (isRinging false, isDialing false, showingDisc false)
W/ActivityManager(   59): Timeout of broadcast BroadcastRecord{44ffa778 android.intent.action.PHONE_STATE} - receiver=android.os.BinderProxy@4512e960
W/ActivityManager(   59): Receiver during timeout: ResolveInfo{450dc090 com.shwordfishland.calltimecontrol.PhoneCallReceiver p=0 o=0 m=0x108000}
I/Process (   59): Sending signal. PID: 597 SIG: 3
I/dalvikvm(  597): threadid=3: reacting to signal 3
I/dalvikvm(  597): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 59 SIG: 3
I/dalvikvm(   59): threadid=3: reacting to signal 3
I/dalvikvm(   59): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 117 SIG: 3
I/dalvikvm(  117): threadid=3: reacting to signal 3
I/dalvikvm(  117): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 121 SIG: 3
I/dalvikvm(  121): threadid=3: reacting to signal 3
I/dalvikvm(  121): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 160 SIG: 3
I/dalvikvm(  160): threadid=3: reacting to signal 3
I/dalvikvm(  160): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 263 SIG: 3
I/dalvikvm(  263): threadid=3: reacting to signal 3
I/dalvikvm(  263): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 254 SIG: 3
I/dalvikvm(  254): threadid=3: reacting to signal 3
I/dalvikvm(  254): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 461 SIG: 3
I/dalvikvm(  461): threadid=3: reacting to signal 3
I/dalvikvm(  461): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 132 SIG: 3
I/dalvikvm(  132): threadid=3: reacting to signal 3
I/dalvikvm(  132): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 192 SIG: 3
I/dalvikvm(  192): threadid=3: reacting to signal 3
I/dalvikvm(  192): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 166 SIG: 3
I/dalvikvm(  166): threadid=3: reacting to signal 3
I/dalvikvm(  166): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 229 SIG: 3
I/dalvikvm(  229): threadid=3: reacting to signal 3
I/dalvikvm(  229): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 219 SIG: 3
I/dalvikvm(  219): threadid=3: reacting to signal 3
I/dalvikvm(  219): Wrote stack traces to '/data/anr/traces.txt'
E/ActivityManager(   59): ANR in com.shwordfishland.calltimecontrol
E/ActivityManager(   59): Reason: Broadcast of Intent { act=android.intent.action.PHONE_STATE flg=0x20000000 cmp=com.shwordfishland.calltimecontrol/.PhoneCallReceiver (has extras) }
E/ActivityManager(   59): Load: 0.7 / 0.22 / 0.18
E/ActivityManager(   59): CPU usage from 28840ms to 86ms ago:
E/ActivityManager(   59):   system_server: 20% = 14% user + 5% kernel / faults: 1840 minor
E/ActivityManager(   59):   m.android.phone: 6% = 5% user + 1% kernel / faults: 867 minor
E/ActivityManager(   59):   adbd: 3% = 0% user + 3% kernel / faults: 1 minor
E/ActivityManager(   59):   d.process.acore: 3% = 2% user + 0% kernel / faults: 540 minor
E/ActivityManager(   59):   logcat: 0% = 0% user + 0% kernel / faults: 4 minor
E/ActivityManager(   59):   mediaserver: 0% = 0% user + 0% kernel / faults: 11 minor
E/ActivityManager(   59):   d.process.media: 0% = 0% user + 0% kernel / faults: 47 minor
E/ActivityManager(   59):   ronsoft.openwnn: 0% = 0% user + 0% kernel / faults: 30 minor
E/ActivityManager(   59):   id.defcontainer: 0% = 0% user + 0% kernel / faults: 47 minor
E/ActivityManager(   59):   qemud: 0% = 0% user + 0% kernel
E/ActivityManager(   59):   ndroid.launcher: 0% = 0% user + 0% kernel / faults: 43 minor
E/ActivityManager(   59):   m.android.email: 0% = 0% user + 0% kernel / faults: 47 minor
E/ActivityManager(   59):   .quicksearchbox: 0% = 0% user + 0% kernel / faults: 45 minor
E/ActivityManager(   59):   com.svox.pico: 0% = 0% user + 0% kernel / faults: 43 minor
E/ActivityManager(   59):   ndroid.settings: 0% = 0% user + 0% kernel / faults: 43 minor
E/ActivityManager(   59):   roid.alarmclock: 0% = 0% user + 0% kernel / faults: 43 minor
E/ActivityManager(   59):   zygote: 0% = 0% user + 0% kernel / faults: 58 minor
E/ActivityManager(   59):   servicemanager: 0% = 0% user + 0% kernel / faults: 5 minor
E/ActivityManager(   59):   rild: 0% = 0% user + 0% kernel
E/ActivityManager(   59):  +calltimecontrol: 0% = 0% user + 0% kernel
E/ActivityManager(   59):  +calltimecontrol: 0% = 0% user + 0% kernel
E/ActivityManager(   59): TOTAL: 39% = 25% user + 14% kernel + 0% softirq
I/Process (   59): Sending signal. PID: 597 SIG: 9
I/ActivityManager(   59): Process com.shwordfishland.calltimecontrol (pid 597) has died.
W/ActivityManager(   59): Scheduling restart of crashed service com.shwordfishland.calltimecontrol/.PhoneCallService in 22608ms
D/dalvikvm(   59): GC_FOR_MALLOC freed 4066 objects / 612200 bytes in 171ms
I/dalvikvm-heap(   59): Grow heap (frag case) to 6.336MB for 168632-byte allocation
D/dalvikvm(   59): GC_FOR_MALLOC freed 182 objects / 8984 bytes in 187ms
D/dalvikvm(  160): GC_EXPLICIT freed 2956 objects / 202280 bytes in 147ms
I/ActivityManager(   59): Start proc com.shwordfishland.calltimecontrol for service com.shwordfishland.calltimecontrol/.PhoneCallService: pid=604 uid=10037 gids={1015}
I/System.out(  604): Service init
I/System.out(  604): |#| **** PhoneCallService - Starting service **** |#|
I/System.out(  604): |#| **** PhoneCallService - End call in : 2 minutes ( 120000 seconds) **** |#|
W/ActivityManager(   59): Timeout executing service: ServiceRecord{450eafc8 com.shwordfishland.calltimecontrol/.PhoneCallService}
I/Process (   59): Sending signal. PID: 604 SIG: 3
I/dalvikvm(  604): threadid=3: reacting to signal 3
I/dalvikvm(  604): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 59 SIG: 3
I/dalvikvm(   59): threadid=3: reacting to signal 3
I/dalvikvm(   59): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 117 SIG: 3
I/dalvikvm(  117): threadid=3: reacting to signal 3
I/dalvikvm(  117): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 121 SIG: 3
I/dalvikvm(  121): threadid=3: reacting to signal 3
I/dalvikvm(  121): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 160 SIG: 3
I/dalvikvm(  160): threadid=3: reacting to signal 3
I/dalvikvm(  160): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 263 SIG: 3
I/dalvikvm(  263): threadid=3: reacting to signal 3
I/dalvikvm(  263): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 254 SIG: 3
I/dalvikvm(  254): threadid=3: reacting to signal 3
I/dalvikvm(  254): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 461 SIG: 3
I/dalvikvm(  461): threadid=3: reacting to signal 3
I/dalvikvm(  461): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 132 SIG: 3
I/dalvikvm(  132): threadid=3: reacting to signal 3
I/dalvikvm(  132): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 192 SIG: 3
I/dalvikvm(  192): threadid=3: reacting to signal 3
I/dalvikvm(  192): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 166 SIG: 3
I/dalvikvm(  166): threadid=3: reacting to signal 3
I/dalvikvm(  166): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 229 SIG: 3
I/dalvikvm(  229): threadid=3: reacting to signal 3
I/dalvikvm(  229): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   59): Sending signal. PID: 219 SIG: 3
I/dalvikvm(  219): threadid=3: reacting to signal 3
I/dalvikvm(  219): Wrote stack traces to '/data/anr/traces.txt'
E/ActivityManager(   59): ANR in com.shwordfishland.calltimecontrol
E/ActivityManager(   59): Reason: Executing service com.shwordfishland.calltimecontrol/.PhoneCallService
E/ActivityManager(   59): Load: 0.49 / 0.23 / 0.19
E/ActivityManager(   59): CPU usage from 44174ms to 115ms ago:
E/ActivityManager(   59):   system_server: 11% = 8% user + 3% kernel / faults: 249 minor
E/ActivityManager(   59):   m.android.phone: 4% = 3% user + 0% kernel / faults: 31 minor
E/ActivityManager(   59):   adbd: 0% = 0% user + 0% kernel
E/ActivityManager(   59):   d.process.acore: 0% = 0% user + 0% kernel / faults: 66 minor
E/ActivityManager(   59):   logcat: 0% = 0% user + 0% kernel
E/ActivityManager(   59):   d.process.media: 0% = 0% user + 0% kernel / faults: 9 minor
E/ActivityManager(   59):   id.defcontainer: 0% = 0% user + 0% kernel / faults: 9 minor
E/ActivityManager(   59):   zygote: 0% = 0% user + 0% kernel / faults: 37 minor
E/ActivityManager(   59):   m.android.email: 0% = 0% user + 0% kernel / faults: 8 minor
E/ActivityManager(   59):   ndroid.launcher: 0% = 0% user + 0% kernel / faults: 7 minor
E/ActivityManager(   59):   .quicksearchbox: 0% = 0% user + 0% kernel / faults: 8 minor
E/ActivityManager(   59):   com.svox.pico: 0% = 0% user + 0% kernel / faults: 7 minor
E/ActivityManager(   59):   ndroid.settings: 0% = 0% user + 0% kernel / faults: 7 minor
E/ActivityManager(   59):   qemud: 0% = 0% user + 0% kernel
E/ActivityManager(   59):   ronsoft.openwnn: 0% = 0% user + 0% kernel / faults: 7 minor
E/ActivityManager(   59):   roid.alarmclock: 0% = 0% user + 0% kernel / faults: 7 minor
E/ActivityManager(   59):  +calltimecontrol: 0% = 0% user + 0% kernel
E/ActivityManager(   59):  +calltimecontrol: 0% = 0% user + 0% kernel
E/ActivityManager(   59): TOTAL: 18% = 12% user + 5% kernel + 0% irq + 0% softirq
I/Process (   59): Sending signal. PID: 604 SIG: 9
I/ActivityManager(   59): Process com.shwordfishland.calltimecontrol (pid 604) has died.
W/ActivityManager(   59): Scheduling restart of crashed service com.shwordfishland.calltimecontrol/.PhoneCallService in 90432ms
D/dalvikvm(   59): GC_FOR_MALLOC freed 1819 objects / 820856 bytes in 157ms
D/CallNotifier(  121): stopRing()... (OFFHOOK state)
D/Ringer  (  121): stopRing()...
D/Ringer  (  121): - stopRing: null mRingHandler!
D/InCallScreen(  121): onPhoneStateChanged()...
D/InCallScreen(  121): updateScreen()...
D/InCallScreen(  121): - updateScreen: updating the in-call UI...
D/PhoneApp(  121): updateWakeState: callscreen true, dialer false, speaker false...
D/PhoneApp(  121): updateWakeState: keepScreenOn = true (isRinging false, isDialing false, showingDisc true)
I/AudioService(   59):  AudioFocus  abandonAudioFocus() from AudioFocus_For_Phone_Ring_And_Calls
D/CallNotifier(  121): DISCONNECT
D/CallNotifier(  121): - onDisconnect: cause = LOCAL, incoming = false, date = 1315611026140
I/ActivityManager(   59): Start proc com.shwordfishland.calltimecontrol for broadcast com.shwordfishland.calltimecontrol/.PhoneCallReceiver: pid=611 uid=10037 gids={1015}
D/CallNotifier(  121): stopRing()... (onDisconnect)
D/Ringer  (  121): stopRing()...
D/Ringer  (  121): - stopRing: null mRingHandler!
D/CallNotifier(  121): - onDisconnect(): logNumber set to: 88642536
D/CallNotifier(  121): - getPresentation(): ignoring connection's presentation: 1
D/CallNotifier(  121): - getPresentation: presentation: 1
D/InCallScreen(  121): onDisconnect:  incoming: false state: DISCONNECTED post dial state: COMPLETE, cause=LOCAL

I'm not sure is this is the best way to do that but it's that I did with my limited knowledge.

Any help or advice is really appreciate.

Best regards.

JR

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夜夜流光相皎洁 2024-12-10 14:39:37

当 Intent 触发您的 BroadcastReceiver 时,您的系统将被唤醒,直到 BroadcastReceiveronReceive() 完成。当此方法完成后,系统资源(包括 CPU)将重新进入睡眠状态。由于您从 onReceive() 启动一个服务,该服务将继续运行直到 CPU 运行,但它停止时您的服务也会停止。为了处理这种情况,您必须在 onReceive() 中获取 CPU 唤醒锁并将其传递给服务,服务完成后将释放它。希望这有帮助!

另请在此处检查:从广播接收器获取唤醒锁时出现问题

When an Intent fires your BroadcastReceiver, your system wakes up until the onReceive() of the BroadcastReceiver is finished. When this method finishes, then the system resources go back to sleep including the CPU. Since you start a service from the onReceive(), the service will continue to run until the CPU is running, but it stops your service will also stop. In order to handle such a case you have to acqire a CPU wakelock in the onReceive() and pass it to the Service, which will release it when the job is done. Hope this helps!

Check also here: Problem acquiring wake lock from broadcast receiver

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文