我使用以下代码接听来自我的应用(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 中接听来电。
谢谢。
答案 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;
}
}
}