您的位置:首页 > 其它

获取整机应用信息以及启动界面(通过adb启动应用)

2016-01-07 15:30 363 查看
通过Context.getPackgeManager来获取你关心的应用信息,包括icon、应用名、版本号等。

但是如果要让你的脚本能够在任何界面下不通过点击图标而启动应用,除了包名之外还需要主Activity的信息,以下的AppInfo中,通过配置Intent,过滤出了主Activity信息。

最后,可以通过如下方式启动被测应用(我的应用背景是自己写一个Android应用,把整机所有的应用都放到一个spinner中供用户选择,用户点击被测应用,则进入该应用):

初始化spinner

//获取应用信息
ArrayList<AppInfo> appList = AppInfo.getAllAppsInfo();
//适配器
AppAdapter adapter = new AppAdapter(this, appList);
//加载适配器
app_spi.setAdapter(adapter);


//获取被选中的应用
AppInfo appInfo = (AppInfo) app_spi.getSelectedItem();
//获取被测应用信息
String pkgName=appInfo.packageName;
String actName=AppInfo.getLancherActvity(appInfo.packageName);


执行adb命令:

am start -n pkgName+"/"+actName

以下是AppInfo.java文件

import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.ResolveInfo;
import android.graphics.drawable.Drawable;

import com.meitu.travelapk.SharedApplication;

import java.util.ArrayList;
import java.util.List;

/**
* 应用信息
* Created by CrystalChen on 2016/1/6.
*/
public class AppInfo {
public String appName = "";
public String packageName = "";
public String versionName = "";
public int versionCode = 0;
public Drawable appIcon = null;

/**
* 通过包名,获取主Activity信息
* @param pkgName 包名
* @return 主Activity信息
*/
public static String getLancherActvity(String pkgName){
String name="";
Context context= SharedApplication.context;
Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> apps = context.getPackageManager().queryIntentActivities(intent, 0);
for (int i = 0; i < apps.size(); i++) {
if (apps.get(i).activityInfo.packageName.equals(pkgName)){
name = apps.get(i).activityInfo.name;//得到所有app的主Activitivy,
}
}

return  name;

}

/**
* 获取设备上所有的应用信息,包括系统应用
* @return 应用信息
*/
public static ArrayList<AppInfo> getAllAppsInfo() {
Context context= SharedApplication.context;
//获取应用信息
ArrayList<AppInfo> appList = new ArrayList<>(); //用来存储获取的应用信息数据
List<PackageInfo> packages = context.getPackageManager().getInstalledPackages(0);

for (int i = 0; i < packages.size(); i++) {
PackageInfo packageInfo = packages.get(i);
AppInfo tmpInfo = new AppInfo();
tmpInfo.appName = packageInfo.applicationInfo.loadLabel(context.getPackageManager()).toString();
tmpInfo.packageName = packageInfo.packageName;
tmpInfo.versionName = packageInfo.versionName;
tmpInfo.versionCode = packageInfo.versionCode;
tmpInfo.appIcon = packageInfo.applicationInfo.loadIcon(context.getPackageManager());
appList.add(tmpInfo);
}
return appList;
}

/**
* 获取设备上所有的非系统级应用信息
* @return 应用信息
*/
public static ArrayList<AppInfo> getNonSystemAppsInfo() {
Context context= SharedApplication.context;
//获取应用信息
ArrayList<AppInfo> appList = new ArrayList<>(); //用来存储获取的应用信息数据
List<PackageInfo> packages = context.getPackageManager().getInstalledPackages(0);

for (int i = 0; i < packages.size(); i++) {
PackageInfo packageInfo = packages.get(i);
// 非系统应用
if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_EXTRACT_NATIVE_LIBS) == 0) {
AppInfo tmpInfo = new AppInfo();
tmpInfo.appName = packageInfo.applicationInfo.loadLabel(context.getPackageManager()).toString();
tmpInfo.packageName = packageInfo.packageName;
tmpInfo.versionName = packageInfo.versionName;
tmpInfo.versionCode = packageInfo.versionCode;
tmpInfo.appIcon = packageInfo.applicationInfo.loadIcon(context.getPackageManager());
appList.add(tmpInfo);
}
}
return appList;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: