通话结束后应用程序启动

时间:2013-06-25 08:42:28

标签: android android-service

我在后台运行我的应用程序,每隔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);
        }

    }
}

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

1 个答案:

答案 0 :(得分:0)

您的应用程序在Phonecall结束后再次被调用,因为TelephonyManager将始终监听电话的呼叫状态,并且当呼叫结束时它将进入IDLE状态..在一段时间之后它再次调用相同的空闲状态,因此您的APP才会打开..尝试使用布尔值或其他东西

boolean currentState=false;

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

和IDLE STATE

 if(currentState) 
   {
  //open APP
    currentState=false;
   }