Android_实现获取手机内apk并分享的功能

内容参考来源于”谷歌的小弟”-http://blog.csdn.net/lfdfhl/article/details/51286284

该功能在手机QQ里面已经被实现了,可以将手机内安装的应用apk发送给好友.

没啥图片描述可以写啊....

可以看到,里面有的内容分别为: 
1. 图标 
2. 应用名 
3. 应用大小 
4. 安装日期

功能实现的步骤如下:

  1. 先获取手机内应用的集合

    List<PackageInfo> packageInfoList = mPackageManager.getInstalledPackages(0);
  2. 四项数据的获取

 /**
     * 获取应用的名称
     */
   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里面,然后调用系统的分享功能即可.

猜你喜欢

转载自blog.csdn.net/mp624183768/article/details/80950667