How to send apk using share intent programatically in android

前端 未结 1 1133
花落未央
花落未央 2020-12-10 10:38

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 solution

相关标签:
1条回答
  • 2020-12-10 10:57

    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())));
    
    }
    
    0 讨论(0)
提交回复
热议问题