0

我在后台运行我的应用程序以每 1 小时获取一次位置。我还把代码用于读取手机状态,如下所示:

public class IncomingCallInterceptor extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
        String msg = "Phone state changed to " + state;

        if (TelephonyManager.EXTRA_STATE_RINGING.equals(state)) {
            String incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
            msg += ". Incoming number is " + incomingNumber;


            // TODO This would be a good place to "Do something when the phone rings" ;-)
        }

        if (TelephonyManager.EXTRA_STATE_IDLE.equals(state)){
            Intent i = context.getPackageManager()
                    .getLaunchIntentForPackage(
                            context.getPackageName());
            i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                    | Intent.FLAG_ACTIVITY_CLEAR_TOP
                    | Intent.FLAG_ACTIVITY_SINGLE_TOP);
            context.startActivity(i);
        }

    }
}

当我的应用程序正在运行并且有任何电话来电时,它工作正常。电话结束后,它会回到我的应用程序。但主要问题是当我的应用程序没有运行并且任何电话来电并且通话结束后,我的应用程序会自动启动。我认为原因是我在后台运行我的应用程序,这就是它自动启动的原因。但它必须在后台运行。那么当应用程序实际上没有运行时,在呼叫结束后停止我的应用程序自动启动的解决方案是什么??

4

1 回答 1

0

您的应用程序在电话结束后再次被调用,因为 TelephonyManager 将始终监听电话的通话状态,当通话结束时,它会进入空闲状态..一段时间后它再次调用相同的空闲状态,因此您的应用程序刚刚打开..尝试使用布尔值什么的

boolean currentState=false;

then in OFFHOOK make it true and when first time goes in a idle state make it ture

并处于空闲状态

 if(currentState) 
   {
  //open APP
    currentState=false;
   }
于 2013-06-25T11:07:14.737 回答