gpt4 book ai didi

android - 我如何在android中获取Phone实例?

转载 作者:太空宇宙 更新时间:2023-11-03 13:35:03 27 4
gpt4 key购买 nike

我必须在 android 电话上使用 android ITelephony 的内部类。我正在使用 ITelephony 通过获取其实例来调用电话

ITelephony phone = ITelephony.Stub.asInterface(
ServiceManager.getService(Context.TELEPHONY_SERVICE)
);

然后调用

phone.call(destNum);

现在我需要执行其他操作,例如保持通话。 ITelephony 没有为此提供 API,但我找到了一个具有 switchHoldingAndActive() 的 Phone 类,但要调用它,我需要一个 Phone 实例到当前正在运行的 Activity 调用。我试过了

Phone PhoneActive = PhoneFactory.getDefaultPhone();

但它给了我一个异常(exception)说

Caused by: java.lang.RuntimeException: 
Can't create handler inside thread that has not called Looper.prepare()

获取电话实例的正确方法是什么?

最佳答案

没有正确的方法来获取 Phone 实例。据我所知,getDefaultPhone() 仅当它是由您的线程(通过 PhoneFactory.makeDefaultPhone())创建时才返回当前 Activity 电话子类 (GSM/CDMA) 的实例。但是,我相信该实例是由预安装的 Call 应用程序创建的,因此如果您尝试它是行不通的。很久以前,我尝试使用反射来注册精确的调用状态更新,但由于安全异常而卡住了。我的应用程序必须在系统进程中运行......我的代码是这样的:

mPhoneFactory = Class.forName("com.android.internal.telephony.PhoneFactory");
Method mMakeDefaultPhone = mPhoneFactory.getMethod("makeDefaultPhone", new Class[] {Context.class});
mMakeDefaultPhone.invoke(null, getContext());

Method mGetDefaultPhone = mPhoneFactory.getMethod("getDefaultPhone", null);
mPhone = mGetDefaultPhone.invoke(null);

Method mRegisterForStateChange = mPhone.getClass().getMethod("registerForPreciseCallStateChanged",
new Class[]{Handler.class, Integer.TYPE, Object.class});

mRegisterForStateChange.invoke(mPhone, mHandler, CALL_STATE_CHANGED, null);

关于android - 我如何在android中获取Phone实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8384494/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com