可以通过sdk实例化telephony.Phone对象吗?

tsm*_*ith 15 android

我正在尝试获取一个电话对象,以便我可以在我的应用程序中呼叫和召开两个号码.

我试过使用静态PhoneFactory.makeDefaultPhones((Context)this)但没有运气.

String phoneFactoryName = "com.android.internal.telephony.PhoneFactory";
String phoneName = "com.android.internal.telephony.Phone";
Class phoneFactoryClass = Class.forName(phoneFactoryName);
Class phoneClass = Class.forName(phoneName);
Method getDefaultPhone = phoneFactoryClass.getMethod("getDefaultPhone");
Object phoneObject = getDefaultPhone.invoke(null);
Run Code Online (Sandbox Code Playgroud)

错误 - 由java.lang.RuntimeException引起:必须从Looper线程调用PhoneFactory.getDefaultPhone

icy*_*sor 10

是的,它可以实例化.但你必须克服几个障碍:

  • 在你的AndroidManifest.xml集合中

    机器人:sharedUserId = "android.uid.phone"

    <manifest>标签内.这是防止SecurityException在受保护的Intents由您可能调用的方法(如android.intent.action.SIM_STATE_CHANGED)发送时被抛出的必要条件.

  • 机器人:过程= "com.android.phone"

    在你的<application>标签.这是允许调用getDefaultPhone()/ 所必需的makeDefaultPhone().

  • 要完成所有这些操作,您的应用必须使用系统签名密钥进行签名.


Com*_*are 0

我正在尝试获取一个电话对象,以便我可以从应用程序中呼叫和会议两个号码。

这在 SDK 中是不可能的。

我尝试过使用静态 PhoneFactory.makeDefaultPhones((Context)this) 但没有任何运气。

SDK 中没有这个。请不要超出 SDK 的范围

错误 - 由 java.lang.RuntimeException 引起:必须从 Looper 线程调用 PhoneFactory.getDefaultPhone

那是因为您正在尝试从后台线程做您不应该做的事情。

  • 我意识到我不应该这样做,但是要从我的应用程序内进行高级调用管理,没有任何公共方法足够。我想拨打两个号码,与他们进行会议,然后在适当的时候挂断电话。除了获取内部电话对象之外,您对如何做到这一点有什么建议吗? (4认同)