How to send apk using share intent programatically

2019-01-18 17:31发布

问题:

I have bundle names of some applications so now i need to generate that all application's apks and want to send using share intent.

i tried lot of possible solutions but didn't find any approach

i use this link but didn't working packing my app and share to other + android

Thanks in advance

回答1:

I think this should help you

ArrayList<Uri> arrayListapkFilepath; // define global

                //put this code when you wants to share apk
                arrayListapkFilepath = new ArrayList<Uri>();

                shareAPK(getPackageName());
                // you can pass bundle id of installed app in your device instead of getPackageName()
                Intent intent = new Intent(Intent.ACTION_SEND_MULTIPLE);
                intent.setType("application/vnd.android.package-archive");
                intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM,
                        arrayListapkFilepath);
                startActivity(Intent.createChooser(intent, "Share " +
                        arrayListapkFilepath.size() + " Files Via"));

//Method
public void shareAPK(String bundle_id) {
    File f1;
    File f2 = null;

    final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
    mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
    final List pkgAppsList = getPackageManager().queryIntentActivities(mainIntent, 0);
    int z = 0;
    for (Object object : pkgAppsList) {

        ResolveInfo info = (ResolveInfo) object;
        if (info.activityInfo.packageName.equals(bundle_id)) {

            f1 = new File(info.activityInfo.applicationInfo.publicSourceDir);

            Log.v("file--",
                    " " + f1.getName().toString() + "----" + info.loadLabel(getPackageManager()));
            try {

                String file_name = info.loadLabel(getPackageManager()).toString();
                Log.d("file_name--", " " + file_name);

                f2 = new File(Environment.getExternalStorageDirectory().toString() + "/Folder");
                f2.mkdirs();
                f2 = new File(f2.getPath() + "/" + file_name + ".apk");
                f2.createNewFile();

                InputStream in = new FileInputStream(f1);

                OutputStream out = new FileOutputStream(f2);

                // byte[] buf = new byte[1024];
                byte[] buf = new byte[4096];
                int len;
                while ((len = in.read(buf)) > 0) {
                    out.write(buf, 0, len);
                }
                in.close();
                out.close();
                System.out.println("File copied.");
            } catch (FileNotFoundException ex) {
                System.out.println(ex.getMessage() + " in the specified directory.");
            } catch (IOException e) {
                System.out.println(e.getMessage());
            }
        }
    }

    arrayListapkFilepath.add(Uri.fromFile(new File(f2.getAbsolutePath())));

}