Search code examples
androidandroid-intentshare-buttonexplicit-intent

Share application link and apk file in android


I Make a button for both apk and link share link share is working fine but when app will be share the apk name is changed to "untitled" i want the same name as my apk name

my code for link

btnShare.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

           ApplicationInfo app = getApplicationContext().getApplicationInfo();
            String filePath = app.publicSourceDir;
            Intent sharingIntent = new Intent(Intent.ACTION_SEND);
            Uri uri = Uri.parse(filePath);
            sharingIntent.setType("*/*");
            sharingIntent.putExtra(Intent.EXTRA_STREAM, uri);
            sharingIntent.putExtra(Intent.EXTRA_TEXT, "Click to blue link and download thegame. https://drive.google.com/open?id=10Nc5BoYn4NZ_O8ae32UVQwyzdCzFxNy");
            startActivity(Intent.createChooser(sharingIntent, "Share app using"));
        }
    });

Solution

  • If you want to share your app link and your apk file, do it as separate task. (with two buttons)

    Sharing link can be done as you mentioned since it is a text.

    To share apk file,First you need to get your app apk file as,

     ApplicationInfo packageinfo = context.getPackageManager().getApplicationInfo(yourpackagename, 0);
     File file = new File(packageinfo.publicSourceDir);
    

    Then copy the file to another one

    try {
        //Make new directory in new location
        File tempFile = new File(getExternalCacheDir() + "/ExtractedApk");
        //If directory doesn't exists create new
        if (!tempFile.isDirectory())
            if (!tempFile.mkdirs())
                return;
        //Get application's name and convert to lowercase
        tempFile = new File(tempFile.getPath() + "/" + "appname" + ".apk");
        //If file doesn't exists create new
        if (!tempFile.exists()) {
            if (!tempFile.createNewFile()) {
                return;
            }
        }
        //Copy file to new location
        InputStream in = new FileInputStream(originalApk);
        OutputStream out = new FileOutputStream(tempFile);
    
        byte[] buf = new byte[1024];
        int len;
        while ((len = in.read(buf)) > 0) {
            out.write(buf, 0, len);
        }
        in.close();
        out.close();
        System.out.println("File copied.");
        //Open share dialog
        intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(tempFile));
        startActivity(Intent.createChooser(intent, "Share app via"));
    
    } catch (IOException e) {
        e.printStackTrace();
    }
    

    source is here

    You can share it using created file path

    Intent sharingIntent = new Intent(Intent.ACTION_SEND);
    Uri uri = Uri.parse(filepath);
    sharingIntent.setType("*/*");
    sharingIntent.putExtra(Intent.EXTRA_STREAM, uri);
    sharingIntent.putExtra(Intent.EXTRA_TEXT, "Click to blue link and download thegame. https://drive.google.com/open?id=10Nc5BoYn4NZ_O8ae32UVQwyzdCzFxNy");
    startActivity(Intent.createChooser(sharingIntent, "Share app using"));
    

    This will change content as text/apk based on chosen application