内容参考来源于”谷歌的小弟”-http://blog.csdn.net/lfdfhl/article/details/51286284
该功能在手机QQ里面已经被实现了,可以将手机内安装的应用apk发送给好友.
可以看到,里面有的内容分别为:
1. 图标
2. 应用名
3. 应用大小
4. 安装日期
功能实现的步骤如下:
先获取手机内应用的集合
List packageInfoList = mPackageManager.getInstalledPackages(0);
四项数据的获取
/**
* 获取应用的名称
*/
public String getApplicationName(String packageName,PackageManager packageManager) {
String applicationName=null;
try {
ApplicationInfo applicationInfo = packageManager.getApplicationInfo(packageName, 0);
applicationName = (String) packageManager.getApplicationLabel(applicationInfo);
} catch (PackageManager.NameNotFoundException e) {
}
return applicationName;
}
我们通过packageManager.getApplicationLabel(applicationInfo);
获得了应用名
其实通过packageManager.getApplicationIcon(ApplicationInfo info);
就能获得应用的icon
但是真机测试发现华为/小米的手机获取到的是系统默认的小绿人icon,无法正确获取图标.
原因并没有做出具体说明…
在PackageInfo
中有这个字段:public ApplicationInfo applicationInfo;
,
里面可以找到:
//Retrieve the current graphical icon associated with this item.
public Drawable loadIcon(PackageManager pm) {
return pm.loadItemIcon(this, getApplicationInfo());
}
这样就能正确获得icon了.
同样的,PackageInfo
内部还有public long lastUpdateTime;
字段
需要注意的是这个值是一个毫秒值
需要用SimpleDateFormat
来进行转换.
PS:还有public long firstInstallTime;
字段.
获取apk文件大小的话,首先需要找到apk文件本身
可惜的是packageManager
并没有类似getApplicationApk
这样的方法.
其实还是从PackageInfo
里面的ApplicationInfo
里面去找:
public String sourceDir;
官方文档对其的描述为
Full path to the base APK for this application
有了路径,就都好办了:
File apkFile = new File(packageInfo.applicationInfo.sourceDir);
apkFile.length() / 1024 / 1024
注意:获取手机apk的信息是一个耗时操作,要在子线程进行
最后就是如何分享出去:
private class ItemClickListenerImpl implements AdapterView.OnItemClickListener{
@Override
public void onItemClick(AdapterView> parent, View view, int position, long id) {
File apkFile = mAppInfoList.get(position).getApkFile();
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.setType("*/*");
intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(apkFile));
startActivity(intent);
}
}
将apk文件放入intent里面,然后调用系统的分享功能即可.