跳转应用商店过滤

private void goToAppMarket(){
try {
Uri uri = Uri.parse("market://details?id=" + getPackageName());
Intent hasinstalled = new Intent(Intent.ACTION_VIEW, uri);
ArrayList<Intent> targetintent = new ArrayList<Intent>();
//获取手机已安装市场
List<ResolveInfo> marketlist = getPackageManager().queryIntentActivities(hasinstalled, 0);
for (ResolveInfo info : marketlist) {
ActivityInfo actinfo = info.activityInfo;
if (filterMarket(actinfo.packageName))
continue;
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
intent.setPackage(actinfo.packageName);
targetintent.add(intent);
}
if (targetintent.size() > 0) {
Intent chooser = Intent.createChooser(targetintent.remove(0), getString(R.string.about_select_app));
chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetintent.toArray(new Parcelable[]{}));
startActivity(chooser);
} else {
Toast.makeText(this, getString(R.string.myinfo_about_take_score_no_market), Toast.LENGTH_SHORT).show();
}
}catch (Throwable e){
Toast.makeText(this, getString(R.string.myinfo_about_take_score_no_market),Toast.LENGTH_SHORT).show();
}


}
/**
* 筛选市场应用,拦截非应用渠道市场
* @return true 拦截 fase 未拦截
*/
private boolean filterMarket(String packageName)
{
if(MARKET_APP_TYPE_360.equals(packageName)){//360手机助手
return false;
}else if(MARKET_APP_TYPE_WANDOUJIA.equals(packageName)){//豌豆荚
return false;
}else if(MARKET_APP_TYPE_ANDROID.equals(packageName)){//安卓市场
return false;
}else if(MARKET_APP_TYPE_BAIDU.equals(packageName)){//百度手机助手
return false;
}else if(MARKET_APP_TYPE_XIAOMI.equals(packageName)){//小米商城
return false;
}
return true;
}
View.OnClickListener onClickListener=new View.OnClickListener() { @Override public void onClick(View view) { switch (view.getId()) { case R.id.baidu_btn: if (MDMUtil.appIsInstalled( getContext(),"com.baidu.BaiduMap")) {//传入指定应用包名 try { double[] gd_lat_lon ; if(RoutingXModel.isGpslatlon){ gd_lat_lon= gaoDeToBaidu(xModel.poc_lon,xModel.poc_lat); }else{ gd_lat_lon= new double[2]; gd_lat_lon[0]=xModel.poc_lon; gd_lat_lon[1]=xModel.poc_lat; } Intent intent = Intent.getIntent("intent://map/direction?" + "destination=latlng:" + gd_lat_lon[1] + "," + gd_lat_lon[0]+ "|name:我的目的地" + //终点 "&mode=driving&" + //导航路线方式 "&src=appname#Intent;scheme=bdapp;package=com.baidu.BaiduMap;end"); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); getContext().startActivity(intent); //启动调用 } catch (URISyntaxException e) { Log.e("intent", e.getMessage()); } } else {//未安装 //market为路径,id为包名 //显示手机上所有的market商店 Toast.makeText(getContext(), "您尚未安装百度地图", Toast.LENGTH_LONG).show(); Uri uri = Uri.parse("market://details?id=com.baidu.BaiduMap"); Intent intent = new Intent(Intent.ACTION_VIEW, uri); if (intent.resolveActivity(getContext().getPackageManager()) != null){ getContext().startActivity(intent); } } dismiss(); break; case R.id.gaode_btn: if (MDMUtil.appIsInstalled( getContext(),"com.autonavi.minimap")) { Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.addCategory(Intent.CATEGORY_DEFAULT); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); double[] gd_lat_lon ; if(!RoutingXModel.isGpslatlon){ gd_lat_lon= bdToGaoDe(xModel.poc_lat,xModel.poc_lon); }else{ gd_lat_lon= new double[2]; gd_lat_lon[0]=xModel.poc_lon; gd_lat_lon[1]=xModel.poc_lat; } //将功能Scheme以URI的方式传入data Uri uri = Uri.parse("androidamap://navi?sourceApplication=appname&poiname=fangheng&lat;=" + gd_lat_lon[1] + "&lon;=" + gd_lat_lon[0] + "&dev=0&style=4"); intent.setData(uri); //启动该页面即可 getContext().startActivity(intent); } else { Toast.makeText(getContext(), "您尚未安装高德地图", Toast.LENGTH_LONG).show(); Uri uri = Uri.parse("market://details?id=com.autonavi.minimap"); Intent intent = new Intent(Intent.ACTION_VIEW, uri); if (intent.resolveActivity(getContext().getPackageManager()) != null){ getContext().startActivity(intent); } } dismiss(); break; case R.id.tencent_btn: Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.addCategory(Intent.CATEGORY_DEFAULT); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); double[] gd_lat_lon ; if(!RoutingXModel.isGpslatlon){ gd_lat_lon= bdToGaoDe(xModel.poc_lat,xModel.poc_lon); }else{ gd_lat_lon= new double[2]; gd_lat_lon[0]=xModel.poc_lon; gd_lat_lon[1]=xModel.poc_lat; } //将功能Scheme以URI的方式传入data Uri uri = Uri.parse("qqmap://map/routeplan?type=drive&to;=我的目的地&tocoord;=" + gd_lat_lon[1]+ "," + gd_lat_lon[0]); intent.setData(uri); if (intent.resolveActivity(getContext().getPackageManager()) != null) { //启动该页面即可 getContext().startActivity(intent); } else { Toast.makeText(getContext(), "您尚未安装腾讯地图", Toast.LENGTH_LONG).show(); } dismiss(); break; case R.id.cancel_btn2: dismiss(); break; } } };
<think> 首先,用户的问题是:"我想查找在Android系统中拉起Google应用商店的方法。请问Android系统中拉起Google应用商店的方法?" 我需要基于提供的站内引用来回答。用户提到的引用有四个: - 引用[1]:展示了如何通过包名跳转到Google应用商店的APP详情界面。代码示例是Java代码,使用Intent。关键部分是: ```java try { String uri = "market://details?id=" + packageName; Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse(uri)); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setPackage("com.android.vending");//指定打开的应用商店 startActivity(intent); } catch (Exception e) { } ``` 这直接回答了用户的问题:如何拉起Google应用商店。 - 引用[2]:提到了Play Games的包名和一些活动,但似乎不太直接相关。 - 引用[3]:是关于Google Play商店上架流程,涉及SDK接入等,不直接相关。 - 引用[4]:类似于引用[2],提到了应用详情页面和包名,但内容似乎重复或部分截断。 用户的主要需求是查找拉起Google应用商店的方法,引用[1]直接提供了解决方案。所以,我应该基于引用[1]来构建回答。 系统指令要求: - 使用中文回答。 - 结构清晰,帮助用户逐步解决问题。 - 生成相关问题(在末尾添加§§相关问题§§)。 - 引用标识:在回答中引用的段落末尾自然地添加引用标识,例如[^1]。 - LaTeX相关指令:但这个问题似乎不需要数学表达式,所以我可以忽略那些部分。 回答结构: 1. **逐步解释方法**:解释如何使用Intent来拉起Google应用商店。 2. **提供代码示例**:基于引用[1],展示代码。 3. **注意事项**:提到可能的问题,如设备上没有安装Google Play商店等。 4. **添加引用标识**:在引用部分添加[^1]。 5. **生成相关问题**:在末尾添加相关问题部分。 相关内容: - 拉起应用商店的通用方法是使用 "market://" URI scheme。 - 在Android中,使用Intent.ACTION_VIEW。 - 指定包名为 "com.android.vending" 来确保打开Google Play商店。 - 需要处理异常,以防没有安装Google Play商店。 完整回答框架: - 开头:直接回答用户问题。 - 主体:解释步骤和代码。 - 注意事项:提醒用户潜在问题。 - 结尾:添加相关问题。 相关问题建议: 1. 如果没有安装Google Play商店,如何优雅地处理? 2. 如何跳转到特定应用的详情页面? 3. 这个方法在Android不同版本上有兼容性问题吗? 4. 其他应用商店的拉起方法? 确保回答真实可靠:基于Android官方文档,URI scheme "market://" 是标准的。 最后,添加引用标识:在提到引用[1]的地方添加[^1]。 回答内容: - 在Android系统中拉起Google应用商店,可以使用以下Intent方法。 - 代码示例(从引用[1]复制并适当解释)。 - 解释代码各部分。 - 添加[^1]标识。 - 注意事项:如设备上没有安装Google Play时的处理。 - §§相关问题§§ </think> ### Android系统中拉起Google应用商店的方法 在Android系统中,拉起Google应用商店(Google Play Store)主要通过Intent机制实现。核心方法是使用 "market://" URI scheme,指定应用的包名(packageName)来跳转到应用详情页面。以下是详细的步骤和代码实现说明,基于站内引用[^1]提供的可靠方案。 #### 步骤分解 1. **构建URI**:使用 "market://details?id=" 格式拼接目标应用的包名(例如,com.example.app)。 2. **创建Intent**:设置Intent为 Intent.ACTION_VIEW,并绑定URI。 3. **指定应用商店**:通过 `intent.setPackage("com.android.vending")` 强制指定打开Google Play商店(避免跳转到其他应用商店)。 4. **启动Activity**:调用 `startActivity(intent)` 拉起应用商店界面。 5. **异常处理**:添加try-catch块,以防设备未安装Google Play商店或URI无效。 #### 完整示例代码(Java) 以下代码基于引用[^1]提供的实现,可直接用于Android项目: ```java try { // 获取目标应用的包名,例如:com.google.android.apps.maps 或从参数传入 String packageName = "com.example.targetapp"; // 替换为实际包名 // 构建Market URI String uri = "market://details?id=" + packageName; // 创建Intent并设置属性 Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse(uri)); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 确保在新任务中启动 intent.setPackage("com.android.vending"); // 强制指定Google Play商店包名[^1] // 启动应用商店 startActivity(intent); } catch (Exception e) { // 异常处理:例如,设备未安装Google Play时,可跳转到网页版或提示用户 e.printStackTrace(); // 可选:使用网页版备选方案 // String webUrl = "https://play.google.com/store/apps/details?id=" + packageName; // startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(webUrl))); } ``` #### 关键注意事项 - **包名确认**:确保 `packageName` 正确无误(可通过应用清单文件获取)。例如,Google Play商店自身包名是 "com.android.vending"。 - **兼容性**:此方法在Android 4.0+ 设备上普遍支持。如果设备未安装Google Play商店(如某些国产手机),会抛出ActivityNotFoundException,建议添加备选方案(如跳转到网页版)。 - **权限需求**:无需额外权限,但需在AndroidManifest.xml中确保未禁用Intent过滤。 - **测试验证**:在真实设备测试时,确保Google Play服务已安装并可正常访问[^1][^2]。 该方法已广泛应用于各类Android应用,如游戏更新或应用推广场景[^1][^3]。如果遇到问题,可参考Google官方文档优化URI处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安卓学习乐园

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值