Android跳转到应用宝指定关键字搜索界面
Android跳转到应用宝指定关键字搜索界面
项目里有需求就是根据用户说的话,打开相应的app.从网上查看了些资料.加以自己的想法.供自己以后学习之用.
有两种情况,
(1) 手机存在此app,
需要先遍历手机中所有的应用程序包名,通过包名拿到应用的名称.如果和用户说的名称一样.就可以拿到一个属于该应用的intent.然后再开启就可以了.
public static Intent getIntentByName(Context context, String name){ //拿到包的管理者 PackageManager pm = context.getApplicationContext().getPackageManager(); //得到所有手机中APP的信息 List allApps = pm.getInstalledPackages(0); Intent intent = null; //遍历所有的app信息,查看是否有相等的应用名称,有的话,就返回一个intent. if (null != allApps && null != name) { for (PackageInfo pi : allApps) { if (name.equals(pi.applicationInfo.loadLabel(pm))) { intent = pm.getLaunchIntentForPackage(pi.packageName); break; } } } //通过返回的Intent开启app public void startApp(Context context, String name){ if(null != name ){ Intent intent = getIntentByName(context,name); intent.setFlags(FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); } }
(2)手机不存在此App
这里面又可以分为两种情况,
第一种,有市面上大部分应用的app的包名的数据库,当遍历完手机中的app没有查找到符合条件的时候,从这个数据库中查找对应应用程序的包名.找到过后可以通过包名直接打开应用宝对应应用的详情界面.
Uri uri = Uri.parse("market://details?id=" + packageName);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
//然后和上面的步骤一样,开启Activity就可以了
但是,这种需要的数据库可能有点大,比较占内存.
第二种.不进入具体的应用详情界面,而是根据用户指定的名称来跳转到应用宝的搜索界面,属于模糊定位.
Uri uri = Uri.parse("market://search?q=pub:+" + name);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
//也是开启Activity就可以了
推荐使用第二种,因为市面上的应用太多了,还是交给应用宝本身去搜索比较好.