Lollipop:在android lollipop中以编程方式接受来电

时间:2015-02-17 06:44:25

标签: android android-intent android-broadcast

我使用以下代码接听来自我的应用(BroadcastReceiver' s onReceive())的来电,它正在 Kitkat 中工作。相同的代码无法在 Lollipop 中使用。

Intent intent = new Intent(Intent.ACTION_MEDIA_BUTTON);
intent.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_HEADSETHOOK));
// send ordered broadcast
context.sendOrderedBroadcast(intent, null);

请告诉我如何在 Lollipop 中接听来电。

谢谢。

2 个答案:

答案 0 :(得分:0)

从Lollipop,如果我们的应用程序是System app or application has root access那么我们只能以编程方式接听来电

  

对于第三方开发者应用程序,Lollipop OS不允许   以编程方式回答来电

您可以检查系统应用或root权限的使用方式:In this Answer

答案 1 :(得分:0)

这对我有用。将此代码放入您的广播接收器中以执行操作“android.intent.action.PHONE_STATE”。您的手机需要扎根。生成一个apk文件的ur app并将其放入/ system / priv- apps / .Works for Android v 5.0即棒棒糖。

   final String LOG_TAG = "TelephonyAnswer";

    TelephonyManager tm = (TelephonyManager) context
            .getSystemService(Context.TELEPHONY_SERVICE);

    try {
        if (tm == null) {
            // this will be easier for debugging later on
            throw new NullPointerException("tm == null");
        }
        // do reflection magic
        tm.getClass().getMethod("answerRingingCall").invoke(tm);
    } catch (Exception e) {
    }

不要忘记在你的清单中添加权限。

 <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
 <uses-permission android:name="android.permission.MODIFY_PHONE_STATE"/>

如果modify_phone_state没有明确工作,请使用此代码

 ActivityCompat.requestPermissions(MainActivity.this,
                new String[]{Manifest.permission.MODIFY_PHONE_STATE},
                1);

和覆盖方法

@Override
public void onRequestPermissionsResult(int requestCode,
                                       String permissions[], int[] grantResults) {
    switch (requestCode) {
        case 1: {

            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {


            } else {

                Toast.makeText(MainActivity.this, "Permission denied to pick call", Toast.LENGTH_SHORT).show();
            }
            return;
        }

    }
}