我正在构建一个应用程序,为用户激活服务后阻止所有来电提供一种方法。
在针对较新的SDK版本(在我的情况下为Oreo及更高版本)中,显然没有解决问题的方法。我最接近解决方案的地方是this thread,但该问题没有公认的答案,在我的情况下也无法提供任何答案。
以下是我也访问过的一些链接:
我的方法是使用前台服务并收听电话状态更改。
@Override
public void onCreate() {
super.onCreate();
TelephonyManager telephonyManager = (TelephonyManager) getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE);
telephonyManager.listen(new CallStateListener(), PhoneStateListener.LISTEN_CALL_STATE);
Log.d(TAG, "Called onCreate() method");
}
这是CallStateListener
private class CallStateListener extends PhoneStateListener {
@Override
public void onCallStateChanged(int state, String phoneNumber) {
if (state == TelephonyManager.CALL_STATE_RINGING) {
Log.d(TAG, "Phone is ringing");
TelephonyManager telephonyManager = (TelephonyManager) getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE);
try {
//Gain access to ITelephony getter
Class c = Class.forName(telephonyManager.getClass().getName());
Method method = c.getDeclaredMethod("getITelephony");
method.setAccessible(true);
com.android.internal.telephony.ITelephony telephony = (ITelephony) method.invoke(telephonyManager);
//Hung up the call
telephony.endCall();
} catch (Exception e) {
Log.d(TAG, "Exception occurred: " + e.getMessage());
e.printStackTrace();
}
}
}
}
我可以确认已收到日志消息Phone is ringing
我获得的异常是Exception occurred: MODIFY_PHONE_STATE permission required.
权限MODIFY_PHONE_STATE
对第三方应用程序开发人员不可用。我已经看到了修改短绒棉的建议,但我仍然无法请求此权限,因此异常仍然存在。
在这些SDK版本中是否有挂断电话的替代方法?如果是这样,我很乐意被任命为正确的方向。谢谢。