Android 在主屏幕上打开拨号器应用程序

Android 在主屏幕上打开拨号器应用程序,android,android-intent,Android,Android Intent,我如何打开diler应用程序到主屏幕,其中显示最近和搜索(而不是拨号板) 我已经尝试过context.getPackageManager().getLaunchIntentForPackage(“com.android.diler”)但是它返回空值com.android.diler也返回空值。这个怎么样: Intent intent = new Intent(Intent.ACTION_DIAL); startActivity(intent); 编辑:提供从主屏幕启动拨号程序的代码 啊。问题

我如何打开diler应用程序到主屏幕,其中显示最近和搜索(而不是拨号板)

我已经尝试过
context.getPackageManager().getLaunchIntentForPackage(“com.android.diler”)
但是它返回空值
com.android.diler
也返回空值。

这个怎么样:

Intent intent = new Intent(Intent.ACTION_DIAL);
startActivity(intent);

编辑:提供从主屏幕启动拨号程序的代码

啊。问题是,并不是只有一个拨号器。每个电话制造商都可以(而且通常都会)提供自己的拨号应用程序。因此,您需要知道拨号程序应用程序的包名。这里有一种方法可以解决这个问题:

    // Ask the PackageManager to return a list of Activities that support ACTION_DIAL
    PackageManager pm = getPackageManager();
    Intent intent = new Intent(Intent.ACTION_DIAL);
    List<ResolveInfo> list = pm.queryIntentActivities(intent, 0);
    List<String> packageList = new ArrayList<String>();
    if (list != null) {
        // For each entry in the returned list, get the package name and add that to a list (ignore duplicates)
        for (ResolveInfo r : list) {
            String packageName = r.activityInfo.packageName;
            if (!packageList.contains(packageName)) {
                packageList.add(packageName);
            }
        }
    }
    // Get a launch Intent for each package in the list
    final List<Intent> launchIntents = new ArrayList<Intent>();
    for (String p : packageList) {
        intent = pm.getLaunchIntentForPackage(p);
        if (intent != null) {
            launchIntents.add(intent);
        }
    }
    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            if (launchIntents.size() > 0) {
                // Get the first launch Intent. If there are more than 1, we don't know how to choose!
                Intent intent = launchIntents.get(0);
                startActivity(intent);
            } else {
                // Couldn't find an way to launch the dialer
            }
        }
    });
//要求PackageManager返回支持操作的活动列表
PackageManager pm=getPackageManager();
意向意向=新意向(意向.行动拨号);
List List=pm.querytentActivities(intent,0);
List packageList=new ArrayList();
如果(列表!=null){
//对于返回列表中的每个条目,获取包名称并将其添加到列表中(忽略重复项)
用于(信息解析程序:列表){
字符串packageName=r.activityInfo.packageName;
如果(!packageList.contains(packageName)){
packageList.add(packageName);
}
}
}
//获取列表中每个包的启动意图
最终列表launchIntents=newarraylist();
用于(字符串p:包装商){
意图=pm.getLaunchIntentForPackage(p);
if(intent!=null){
launchIntents.add(intent);
}
}
setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图){
如果(launchIntents.size()>0){
//获取首次发布的意图。如果有超过1个,我们不知道如何选择!
Intent Intent=launchIntents.get(0);
星触觉(意向);
}否则{
//找不到启动拨号程序的方法
}
}
});
如果用户安装了多个可以响应拨号操作的应用程序,您仍然会遇到问题。你需要想出一个选择正确的方法。我将把它作为练习留给读者


谢谢你的提问,这让我有机会为你找到一个有趣的解决方案:-D

这会打开拨号板上的拨号器,但没有号码。那不是我想要的。我希望拨号程序的应用程序被打开,就好像它的默认拨号程序,你的代码将工作..谢谢