我使用setPackage(" com.android.phone")明确告诉Android使用默认拨号器。这适用于4.4.4。
升级到Lollipop后,失败了。
FATAL EXCEPTION: IntentService[CallIntentService]
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.CALL dat=tel:xxxxxxxxxxxx flg=0x14000000 pkg=com.android.phone }
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1765)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1485)
at android.app.ContextImpl.startActivity(ContextImpl.java:1237)
at android.app.ContextImpl.startActivity(ContextImpl.java:1219)
at android.content.ContextWrapper.startActivity(ContextWrapper.java:322)
at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.os.HandlerThread.run(HandlerThread.java:61)
我们已经有了解决方法吗?
答案 0 :(得分:1)
Lollipop拨号程序的程序包名称为com.google.android.dialer
(至少在Nexus设备上)。
如果您确实要对软件包名称进行硬编码,则可能需要检测设备上哪些拨号器可用。
答案 1 :(得分:1)
setPackage name has changed for Lollipop and above.
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setPackage("com.android.phone"); < 5 (Lollipop)
intent.setPackage("com.android.server.telecom"); >= 5 (Lollipop)
intent.setData(Uri.parse("tel:12121212"));
startActivity(intent);
But its better to choose user.
works "com.android.server.telecom" 5 and above.