我正在尝试开发类似于AutoAnswer的东西,但是当通知广播接收器时它也会自动挂起。我花了一整天时间阅读关于这个问题的其他stackoverflow问题,似乎权限MODIFY_PHONE_STATE
仅限于System Apps,但有些帖子说使用endCall();不需要此权限。
我的问题分为两部分:
endCall()
仍可使用吗?自Android 2.3以来,它曾经在任何地方使用过吗?ITelephony.aidl
并将其放入包装中。我是新用户,因此无法发布图片。这就是我的文件树在netbeans中的样子:
这是我的广播接收器中运行的代码。它之前已被多次发布作为此问题的解决方案但我仍然无法使其工作:/
ITelephony telephonyService;
TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
try {
Class c = Class.forName(telephony.getClass().getName());
Method m = c.getDeclaredMethod("getITelephony");
m.setAccessible(true);
telephonyService = (ITelephony) m.invoke(telephony);
telephonyService.endCall();
}
catch (Exception e) {
//TODO: some exception handling
}
查看日志,我看到了这个错误:
[PhoneIntfMgr] CMD_END_CALL: no call to hang up
编辑:我是Android开发的新手,似乎无法找到Android应用程序的控制台输出 - 比如调用e.printStackTrace(),但我确实让Toast在catch块中显示一些文本这个:
catch (Exception e) {
Toast toast = Toast.makeText(context, "IN CATCH BLOCK ", Toast.LENGTH_LONG);
toast.show();
e.printStackTrace();
}
但屏幕上没有任何内容......
答案 0 :(得分:0)
您可以使用此代码:
telephonyManager.listen(new PhoneStateListener() {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
/* your code */
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Toast.makeText(context.getApplicationContext(), "OFFHOOK",
Toast.LENGTH_SHORT).show();
setResultData(null);
break;
case TelephonyManager.CALL_STATE_RINGING:
/* your code */
break;
}
// super.onCallStateChanged(state, incomingNumber);
}
}, PhoneStateListener.LISTEN_CALL_STATE);
当您要进行OFFHOOK状态时,您可以看到显示“OFFHOOK”的祝酒词,然后setResultData(null);
结束通话。