Neither user 10088 nor current process has android.permission.MODIFY_PHONE_STATE
在自定义接听按钮时报错,错误信息:
java.lang.SecurityException: Neither user 10088 nor current process has android.permission.MODIFY_PHONE_STATE.
AndroidManifest.xml中有相应的权限:
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
接听电话时出错。我用的测试机是三星i9001, 2.3.6的系统
在网上查了些资料,有的说是因为系统没有root过,没有系统权限所致,但我在htc g7(未root过)上测试是可以的,不会报这个错误。
哪位大侠知道是怎么回事,麻烦告知,谢谢!
应该是android版本问题,android在2.3之后将这一权限给封闭了,应用层已经无法访问这一权限;
你可以试一下,在版本1.5上面是可行的,不过版本2.3且之后就已经不能使用了,希望对你有用。
2.3以后就不能用反射的方法来接听电话。我今天找了一个方法在2.3及2.3以后的版本上可以使用,发布这个方法的人说只适用于2.3及2.3以上的版本,不过我在2.2版本上测了一下,也是可以用的。
代码如下:
public synchronized void answerRingingCall()
{//据说该方法只能用于Android2.3及2.3以上的版本上,但本人在2.2上测试可以使用
try
{
Intent localIntent1 = new Intent(Intent.ACTION_HEADSET_PLUG);
localIntent1.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
localIntent1.putExtra("state", 1);
localIntent1.putExtra("microphone", 1);
localIntent1.putExtra("name", "Headset");
context.sendOrderedBroadcast(localIntent1, "android.permission.CALL_PRIVILEGED");
Intent localIntent2 = new Intent(Intent.ACTION_MEDIA_BUTTON);
KeyEvent localKeyEvent1 = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_HEADSETHOOK);
localIntent2.putExtra("android.intent.extra.KEY_EVENT", localKeyEvent1);
context.sendOrderedBroadcast(localIntent2, "android.permission.CALL_PRIVILEGED");
Intent localIntent3 = new Intent(Intent.ACTION_MEDIA_BUTTON);
KeyEvent localKeyEvent2 = new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_HEADSETHOOK);
localIntent3.putExtra("android.intent.extra.KEY_EVENT", localKeyEvent2);
context.sendOrderedBroadcast(localIntent3, "android.permission.CALL_PRIVILEGED");
Intent localIntent4 = new Intent(Intent.ACTION_HEADSET_PLUG);
localIntent4.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
localIntent4.putExtra("state", 0);
localIntent4.putExtra("microphone", 1);
localIntent4.putExtra("name", "Headset");
context.sendOrderedBroadcast(localIntent4, "android.permission.CALL_PRIVILEGED");
}
catch (Exception e)
{
e.printStackTrace();
}
}