如何在Android中获取Phone实例?

如何在Android中获取Phone实例?,第1张

概述我必须在android电话上使用androidITelephony内部类.我正在使用ITelephony通过将其实例获取为来拨打电话ITelephonyphone=ITelephony.Stub.asInterface(ServiceManager.getService(Context.TELEPHONY_SERVICE));然后与phone.call(destNum);现在,我需要执行其他 ***

我必须在android电话上使用android ITelephony内部类.我正在使用ITelephony通过将其实例获取为来拨打电话

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

然后与

phone.call(destNum);

现在,我需要执行其他 *** 作,例如保持通话. ITelephony并未为此提供API,但我发现了一个具有switchHoldingAndActive()的Phone类,但是要调用此类,我需要一个Phone实例来访问当前正在运行的活动调用.我试过了

Phone PhoneActive = PhoneFactory.getDefaultPhone();

但它给了我一个例外的说法

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

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

解决方法:

没有获取Phone实例的正确方法.
AFAIK,只有当您的线程(通过PhoneFactory.makeDefaultPhone())创建时,getDefaultPhone()才返回当前活动Phone子类(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中获取Phone实例?全部内容,希望文章能够帮你解决如何在Android中获取Phone实例?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1084357.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存