Android 如何强制选择已安装的应用商店?

Android 如何强制选择已安装的应用商店?,android,android-intent,Android,Android Intent,我在手机上有谷歌游戏、亚马逊、三星等商店。我想让用户选择去哪个市场。如果我使用market,默认情况下它将进入Google Play应用程序。我想要他们的列表出现。我是否必须手动检查哪些已安装且具有自定义选择屏幕?或者我可以调整当前代码: startActivity(new Intent(Intent.ACTION_VIEW,Uri.parse("market://details?id=" + appName))); 我举一个例子: // get app which can open fil

我在手机上有谷歌游戏、亚马逊、三星等商店。我想让用户选择去哪个市场。如果我使用market,默认情况下它将进入Google Play应用程序。我想要他们的列表出现。我是否必须手动检查哪些已安装且具有自定义选择屏幕?或者我可以调整当前代码:

startActivity(new Intent(Intent.ACTION_VIEW,Uri.parse("market://details?id=" + appName))); 
我举一个例子:

// get app which can open fill
public List<Map<String, Object>> getAppOpeners(Intent intent) {
    if (intent == null) {
        return null;
    }
    List<Map<String, Object>> appinfos = new ArrayList<Map<String, Object>>();
    ResolveInfo app = null;
    List<ResolveInfo> mApps = new ArrayList<ResolveInfo>();

    PackageManager pm = mContext.getPackageManager();
    mApps = pm.queryIntentActivities(intent,
            PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);// get app which can open fill
    Iterator<ResolveInfo> it = mApps.iterator();
    while (it.hasNext()) {
        Map<String, Object> item = new HashMap<String, Object>();
        app = it.next();
        if (true) {// mContext.getPackageManager().getLaunchIntentForPackage(app.activityInfo.packageName)
                    // != null
            item.put("packname", app.activityInfo.packageName);// packname of app
            item.put("appname", app.loadLabel(mContext.getPackageManager()));// name of app
            item.put("icon", app.loadIcon(mContext.getPackageManager()));// icon of app
            item.put("intent", intent);
            appinfos.add(item);
        }
    }
    //appinfos = StringSortUtil.sortString(appinfos, "appname");
    return appinfos;
}
//获取可以打开填充的应用程序
公开名单获得批准者(意向){
if(intent==null){
返回null;
}
List appinfos=new ArrayList();
ResolveInfo app=null;
List mApps=new ArrayList();
PackageManager pm=mContext.getPackageManager();
mApps=pm.QueryInputActivities(意图,
PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);//获取可以打开填充的应用程序
迭代器it=mApps.Iterator();
while(it.hasNext()){
Map item=newhashmap();
app=it.next();
if(true){//mContext.getPackageManager().getLaunchIntentForPackage(app.activityInfo.packageName)
//!=null
item.put(“packname”,app.activityInfo.packageName);//app的packname
item.put(“appname”,app.loadLabel(mContext.getPackageManager());//应用程序的名称
item.put(“icon”,app.loadIcon(mContext.getPackageManager());//应用程序的图标
项目。投入(“意图”,意图);
appinfos.add(项目);
}
}
//appinfos=StringSortUtil.sortString(appinfos,“appname”);
返回appinfos;
}
这些代码用于筛选可以通过mimetype打开文件的应用程序。它可能对您有用


很抱歉我的英语不好

嗯,你可以很快测试你的方法,对吗?当你将startActivity用于你正在创建的意图时会发生什么?它能像预期的那样工作吗?仅供参考-在我的三星S4上,它直接进入我看到的谷歌Play应用商店。好问题。我相信你必须搜索已安装的应用程序列表,并选择可用市场作为自定义列表呈现。恐怕你们不能使用Uri市场协议,因为这个市场是严格地和Google Play捆绑在一起的,而不是其他任何市场。你们缺少代码吗?我添加了Eclipse中建议的导入,但仍然有太多缺少的声明和让我困惑的东西。你能发布所有声明和其他相关代码吗?这让我很困惑。按键图标是我们添加的可绘制图标还是自动提取的图标,因为它无法识别……etcI抱歉,我再次修改了代码,此方法用于筛选应用程序我的电子邮件地址是bjltxsp@gmail.com,如果你没有看到,你可以给我发短信,我的英语不好,很抱歉!这超出了我的理解水平,因此我可能会给你打勾,并将工作外包为一个独立的弹出式活动。谢谢你的回答。