android 自定义接听电话按钮报错

chriscbz 2012-01-17 05:20:11
在自定义接听按钮时报错,错误信息:
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过)上测试是可以的,不会报这个错误。

哪位大侠知道是怎么回事,麻烦告知,谢谢!

邮箱:chriscbz@vip.qq.com
...全文
3472 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
mahoooo 2014-08-27
  • 打赏
  • 举报
回复
求助了,最近被领导逼疯了,有没有源码啊 814252020@qq.com
迪12345 2014-03-20
  • 打赏
  • 举报
回复
楼主 最近在弄这个自动接电话 弄好久也没弄出来~~~ 求给个完整码源~~~ 843469524@qq.com
u011454595 2013-07-24
  • 打赏
  • 举报
回复
楼主能否给个源代码,在此谢谢了 邮箱1126185687@qq.com
lp270152602 2013-05-27
  • 打赏
  • 举报
回复
求完整代码
fire_android 2013-01-05
  • 打赏
  • 举报
回复
lz,我也是用的这个方法,在2.3.6系统上模拟机和真机都可以(三星i9100 2.3.6系统),可是到了4.0系统时,在模拟机上可以,在真机就不行了(三星i9300 4.1.2系统 和 小米 4.0系统),lz可否看看你的接听的完整源码,我在此先谢谢了,我QQ:709490796
lp270152602 2012-12-27
  • 打赏
  • 举报
回复
楼主,写详细一点啊
攻城狮 2012-10-10
  • 打赏
  • 举报
回复
我的也是2.3.6的,是联想的 为什么不能实现自动接听呢, 会不会是定制的原因?
dubo1020 2012-09-27
  • 打赏
  • 举报
回复
这个问题把我搞死了,楼主的办法挺管用的!
androidrose 2012-03-30
  • 打赏
  • 举报
回复
能把上面这个方法写全一点吗
chriscbz 2012-02-09
  • 打赏
  • 举报
回复
由于过年,加上有其他事情,这个事情暂时放下了,今天又查了些资料,找到这个问题的解决办法了,发上来跟大家分享一下。

问题的原因就是楼上 wang2019881117 说的那样,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();
}
}
wang2019881117 2012-01-17
  • 打赏
  • 举报
回复
应该是android版本问题,android在2.3之后将这一权限给封闭了,应用层已经无法访问这一权限;
你可以试一下,在版本1.5上面是可行的,不过版本2.3且之后就已经不能使用了,希望对你有用。

80,472

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧