我想在android 9 pie中以编程方式终止一个呼叫。
我使用了这个代码,但它只对奥利奥有效。这不适合做馅饼
public static boolean killCall(Context context) {
try {
System.out.println("Kill called");
// Get the boring old TelephonyManager
TelephonyManager telephonyManager =
(TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
// Get the getITelephony() method
Class classTelephony = Class.forName(telephonyManager.getClass().getName());
Method methodGetITelephony = classTelephony.getDeclaredMethod("getITelephony");
// Ignore that the method is supposed to be private
methodGetITelephony.setAccessible(true);
// Invoke getITelephony() to get the ITelephony interface
Object telephonyInterface = methodGetITelephony.invoke(telephonyManager);
// Get the endCall method from ITelephony
Class telephonyInterfaceClass =
Class.forName(telephonyInterface.getClass().getName());
Method methodEndCall = telephonyInterfaceClass.getDeclaredMethod("endCall");
// Invoke endCall()
methodEndCall.invoke(telephonyInterface);
System.out.println("Killed");
inCall = false;
} catch (Exception ex) { // Many things can go wrong with reflection calls
ex.printStackTrace();
Log.d(TAG, "PhoneStateReceiver **" + ex.toString());
System.out.println("Error");
return false;
}
return true;
}
在android pie上运行时会出现此错误。有谁能建议我用另一种方法终止通话吗。
W/系统。错误:java。朗。反思。java上的InvocationTargetException。朗。反思。方法使用系统调用(本机方法)。错误:在com上。亨特拉克斯。自动拨号器。电话接收器。com上的killCall(phonestateceiver.java:122)。亨特拉克斯。自动拨号器。自动编辑服务$1$1。在android上运行(AutoRedialerService.java:97)。操作系统。处理程序。android上的handleCallback(Handler.java:873)。操作系统。处理程序。android上的dispatchMessage(Handler.java:99)。操作系统。活套。android上的loop(Looper.java:193)。应用程序。活动线程。java上的main(ActivityThread.java:6669)。朗。反思。方法在com上调用(本机方法)。Android内部的操作系统。RuntimeInit$MethodAndArgsCaller。运行(RuntimeInit.java:493)W/System。错误:在com上。Android内部的操作系统。合子体。main(ZygoteInit.java:858)由以下原因引起:java。lang.SecurityException:需要修改\电话\状态权限。在Android。操作系统。包裹android上的createException(Parcel.java:1942)。操作系统。包裹readException(Parcel.java:1910)W/System。呃:在android上。操作系统。包裹com上的readException(packet.java:1860)。Android内部的电话。ITelephony$Stub$Proxy。endCall(ITelephony.java:2249)。。。10多
使用Telecomanger,使用接听电话权限,以编程方式结束Android 9及以上版本的通话。
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.P) {
TelecomManager tm = (TelecomManager) getSystemService(Context.TELECOM_SERVICE);
if (ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ANSWER_PHONE_CALLS) == PackageManager.PERMISSION_GRANTED) {
success = tm.endCall();
Log.d("call state", "call end");
}
}
正如cantona_7所提到的,MODIFY_PHONE_STATE是仅限系统的权限,没有root访问权限,您无法访问它,并且没有从pie开始终止呼叫的解决方法。
如官方网站所述:
MODIFY_PHONE_STATE添加在API级别1公共静态最终字符串MODIFY_PHONE_STATE
允许修改电话状态-开机、mmi等不包括拨打电话。
不供第三方应用程序使用。
MODIFY_PHONE_状态是仅限系统的权限,您可以根设备并将应用程序放入/system/priv-app文件夹。但是还有其他的方法来解决你的问题。你到底想干什么。
看一下这里
MODIFY_PHONE_STATE是仅限系统的权限,因此不允许应用程序获取该权限。
这可能与以前版本的平台有所不同,但这没关系,因为它只保护私有API,因此如果您正在做需要它的事情,那么您使用的私有API不受支持,并且会导致应用程序在平台的不同版本上中断。
您包含的堆栈爬网尚未完成,因此无法确定您实际在做什么。
我有一个英国电话号码的PHP验证,由潜在客户在我的表格中计算。它看起来像这样: 问题是,在这种形式下,它只允许电话号码前面有一个0,后面有十个数字(),而且最近也有合法的电话号码,前面的零后面有十一个数字。 如何更改代码以允许使用这些类型的电话号码?
本文向大家介绍Android广播接实现监听电话状态(电话的状态,拦截),包括了Android广播接实现监听电话状态(电话的状态,拦截)的使用技巧和注意事项,需要的朋友参考一下 首先我们来理解下监听器的机制。 Android的事件处理机制有两种:监听和回调。 A基于监听的事件处理 主要涉及三类对象:EventSource(事件源),Event(事件),EventListener(事件监听器) 监听机
我有一个较大的代码库,包含许多装饰器类,它们通常将除一个方法外的所有方法委托给一个委托对象,例如: 现在,我正在使用Junit 5为这些包装创建单元测试,调用上的每个方法,并希望验证包装委托上是否有调用,这是一个Mockito mock。 以下是我目前的代码: 当我运行这个,我得到的错误是: 我是否做错了什么,或者如果您不知道确切的方法,是否无法验证方法调用?
9,23日 20min 突然打电话面我, 本科双非,硕士211, 投的嵌入式测试岗(我都不记得我投过这个所,这个岗, 突然打电话让我懵了) 简要说明你的项目做了啥? TCP和UDP的区别 聊不了解测试? 线程和进程的区别 C++STL简单说明 然后开始问我有什么想了解的? 交流之后结束,以为有戏, 结果至今没信. update: 10.11 下午 收到HR电话,邀面,已拒 #中电##中电三十二所#
我有一个很好的问题——创建一个包含联系人列表的电话簿。正如电话簿所说, > 联系人总是要分类的。(按姓名) 可以用星号标记某些联系人,因此他们必须高于其他联系人。(按联系人创建时间排序*联系人) } 测试代码 } 面临的问题: 容器再也找不到条目了,怎么了?我确实试过在Contact上加上equals和hashcode,显然,如果存在一个Comparator/Comparable,那么compar
问题内容: 表现: 在此代码中,Toast始终显示“不收费!”。我在实际设备上进行了测试,将其插入交流或USB电源时,它仍显示“ Not Charging!”(未充电!)。吐司 问题答案: 您无法通过清单进行注册,因此您不会收到这些广播。您正在尝试从中获得额外收入,而这些没有额外收入(例如)。结果,您将获得默认值。