使用默认呼叫应用程序在Android应用程序中进

Unn*_*ati 8 android phone-call android-intent

我使用以下代码从我的Android应用程序调用:

Intent intent = new Intent(Intent.ACTION_CALL);                 
intent.setData(Uri.parse("tel:9898989898"));
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

如果Skype安装在手机中,这将打开Intent Chooser.我想要的是它应该直接从默认调用应用程序调用.

我怎样才能做到这一点?

Pan*_*mar 15

使用 intent.setPackage("com.android.phone");

喜欢

Intent intent = new Intent(Intent.ACTION_CALL);  
intent.setPackage("com.android.phone");               
intent.setData(Uri.parse("tel:9898989898"));
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

但更好的是让用户选择.

阅读更多内容如何从Android本地拨号程序调用,忽略其他拨号程序


COv*_*urt 8

对于通用用途,您可以实现如下.

Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:" + "1111111111"));
callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);


PackageManager packageManager = context.getPackageManager();
List activities = packageManager.queryIntentActivities(callIntent, PackageManager.MATCH_DEFAULT_ONLY);

for(int j = 0 ; j < activities.size() ; j++)
{

    if(activities.get(j).toString().toLowerCase().contains("com.android.phone"))
    {
         callIntent.setPackage("com.android.phone");
    }
    else if(activities.get(j).toString().toLowerCase().contains("call"))
    {
         String pack = (activities.get(j).toString().split("[ ]")[1].split("[/]")[0]);
         callIntent.setPackage(pack);
    }
}

context.startActivity(callIntent);
Run Code Online (Sandbox Code Playgroud)

此外,您还必须在AndroidManifest.xml中将此intent-filter添加到活动或接收器等

<activity>
   <intent-filter>
      <action android:name="android.intent.action.CALL_PRIVILEGED" />
      <data android:scheme="tel" />
   </intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)

最后不要忘记为AndroidManifest.xml添加权限

<uses-permission android:name="android.permission.CALL_PHONE" />
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这对我有用,不像接受的答案似乎取决于设备. (2认同)
  • 这是正确的答案,接受的答案不是通用的,可能无法跨设备工作。 (2认同)