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就可以了
推薦使用第二種,因為市面上的應用太多了,還是交給應用寶本身去搜索比較好.