【问题标题】:Check for call interruption - Android Lollipop检查通话中断 - Android Lollipop
【发布时间】:2015-04-08 11:32:58
【问题描述】:

我在onPause 中使用以下代码来检查我的应用程序中的通话中断

//called inside ONPAUSE i.e. whenever my app is interrupted
ActivityManager activityManager = (ActivityManager)getBaseContext().getSystemService(Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> runningTasks = activityManager.getRunningTasks(Integer.MAX_VALUE);
String packageLaunched = runningTasks.get(0).baseActivity.getPackageName();

// see package name of app which interrupted my app 
if (!packageLaunched.contains("package.name.of.my.app")) {
    // do whatever when any other app interrups, as its on top.
}

问题是,
packageLaunched 用于在以前版本的 android 上调用中断我的应用程序时更改。
但是在 android Lollipop 调用不在任何正在运行的任务中:/

如何跟踪来自我的 Android 应用的来电?

【问题讨论】:

  • 此 API从未 用于此类用途
  • 是的,研究了@ChrisStratton 的文档...不会再使用它了。

标签: java android call android-5.0-lollipop interrupt


【解决方案1】:

注册 BroadCastReciever 以获取来电意图并在 onRecieveIntent 中进行。虽然只是一种解决方法,但在所有情况和所有操作系统版本中都可以解决问题。

【讨论】:

    【解决方案2】:

    此解决方案适用于所有版本的 android,包括棒棒糖
    使用这个广播接收器

    class TeleListener extends PhoneStateListener {
            public void onCallStateChanged(int state, String incomingNumber) {
                super.onCallStateChanged(state, incomingNumber);
                switch (state) {
                case TelephonyManager.CALL_STATE_IDLE:
                    // CALL_STATE_IDLE;
                    Toast.makeText(getApplicationContext(), "CALL_STATE_IDLE",
                            Toast.LENGTH_LONG).show();
                    break;
                case TelephonyManager.CALL_STATE_OFFHOOK:
                    // CALL_STATE_OFFHOOK;
                    Toast.makeText(getApplicationContext(), "CALL_STATE_OFFHOOK",
                            Toast.LENGTH_LONG).show();
                    break;
                case TelephonyManager.CALL_STATE_RINGING:
                    // CALL_STATE_RINGING
                    Toast.makeText(getApplicationContext(), incomingNumber,
                            Toast.LENGTH_LONG).show();
                    Toast.makeText(getApplicationContext(), "CALL_STATE_RINGING",
                            Toast.LENGTH_LONG).show();
                    break;
                default:
                    break;
                }
            }
        }  
    

    并像这样在 onCreate 中注册它

    TelephonyManager TelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
            TelephonyMgr.listen(new TeleListener(), PhoneStateListener.LISTEN_CALL_STATE);  
    

    是的,请不要错过

    干杯!你的问题解决了;)

    【讨论】:

      猜你喜欢
      • 2015-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-23
      • 2015-10-24
      • 2015-05-01
      相关资源
      最近更新 更多