Java 如何通过Instagram、Whatsapp或任何社交应用程序共享您自己应用程序中的图像文件?

Java 如何通过Instagram、Whatsapp或任何社交应用程序共享您自己应用程序中的图像文件?,java,android,instagram,whatsapp,android-sharing,Java,Android,Instagram,Whatsapp,Android Sharing,我想用你自己的应用程序将图片分享给所有人“Instagram”、“WhatsApp”或者使用任何社交媒体应用程序 当我得到whatsapp的解决方案时,我仍然无法得到Instagram的解决方案 我的代码如下: share.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { BitmapDrawable drawabl

我想用你自己的应用程序将图片分享给所有人“Instagram”、“WhatsApp”或者使用任何社交媒体应用程序

当我得到whatsapp的解决方案时,我仍然无法得到Instagram的解决方案

我的代码如下:

share.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            BitmapDrawable drawable = (BitmapDrawable) image.getDrawable();
            Bitmap bitmap = drawable.getBitmap();

            Intent share = new Intent(Intent.ACTION_SEND);
            share.setType("image/jpeg");
            share.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

            ByteArrayOutputStream bytes = new ByteArrayOutputStream();

            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bytes);

            Random generator = new Random();
            int n = 10000;
            n = generator.nextInt(n);

            File f = new File(Environment.getExternalStorageDirectory() + File.separator + "temp_"+n+".jpg");

            try {
                f.createNewFile();
                FileOutputStream fo = new FileOutputStream(f);
                fo.write(bytes.toByteArray());
                fo.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

            share.putExtra(Intent.EXTRA_STREAM, Uri.parse(Environment.getExternalStorageDirectory().getPath()));

            String savedFile = saveImageFile(bitmap, "myFolder");
            Uri imageUri =  Uri.parse(savedFile);

            share.putExtra(Intent.EXTRA_STREAM, imageUri);
            startActivity(Intent.createChooser(share, "Share Image"));
        }
    });
}
savedImages方法:-

public static String saveImageFile(Bitmap image, String folder){

        String now = Long.toString(new Date().getTime());

        File imageFile = new File(Environment.getExternalStorageDirectory()+"/" + folder);
        if (!imageFile.exists()){
            File screenShotsFolder = new File(Environment.getExternalStorageDirectory()+"/"+ folder+ "/");
            screenShotsFolder.mkdirs();
        }

        File imageName = new File(new File(Environment.getExternalStorageDirectory() +"/"+ folder + "/"), now + ".jpg" );

        try{
            FileOutputStream outputStream = new FileOutputStream(imageName);
            image.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
            outputStream.flush();
            outputStream.close();
        }catch (Throwable e){e.printStackTrace();}
        return imageName.toString();
    }
此代码适用于“WhatsApp”但不适用于“Instagram

在Instagram中,我无法发送给特定的人,如“9gag

使用

  share.putExtra(Intent.EXTRA_STREAM, Uri.parse(f.getPath()));
而不是
Environment.getExternalStorageDirectory().getPath())

但是对于牛轧糖及以上,您应该使用
FileProvider
获取文件uri

  picUri = FileProvider.getUriForFile(RegisterActivity.this , this.getApplicationContext().getPackageName() + ".provider", f);
使用

而不是
Environment.getExternalStorageDirectory().getPath())

但是对于牛轧糖及以上,您应该使用
FileProvider
获取文件uri

  picUri = FileProvider.getUriForFile(RegisterActivity.this , this.getApplicationContext().getPackageName() + ".provider", f);

这是完整的代码。将代码更改为以下内容

share.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            BitmapDrawable drawable = (BitmapDrawable) image.getDrawable();
            Bitmap bitmap = drawable.getBitmap();

            Intent share = new Intent(Intent.ACTION_SEND);
            share.setType("image/jpeg");

            ByteArrayOutputStream bytes = new ByteArrayOutputStream();

            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bytes);

            String savedFile = saveImageFile(bitmap, "myFolder");

            Uri imageUri =  Uri.parse(savedFile);
            share.putExtra(Intent.EXTRA_STREAM, imageUri);
            startActivity(Intent.createChooser(share, "Share Image"));

        }
    });
保存图像文件功能

public static String saveImageFile(Bitmap image, String folder){

    String now = Long.toString(new Date().getTime());

    File imageFile = new File(Environment.getExternalStorageDirectory() + folder);
    if (!imageFile.exists()){
        File screenShotsFolder = new File("/sdcard/Pictures/" + folder+ "/");
        screenShotsFolder.mkdirs();
    }

    File imageName = new File(new File("/sdcard/Pictures/" + folder + "/"), now + ".jpg" );

    try{
        FileOutputStream outputStream = new FileOutputStream(imageName);
        image.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
        outputStream.flush();
        outputStream.close();
    }catch (Throwable e){e.printStackTrace();}
    return imageName.toString();
}

这是完整的代码。将代码更改为以下内容

share.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            BitmapDrawable drawable = (BitmapDrawable) image.getDrawable();
            Bitmap bitmap = drawable.getBitmap();

            Intent share = new Intent(Intent.ACTION_SEND);
            share.setType("image/jpeg");

            ByteArrayOutputStream bytes = new ByteArrayOutputStream();

            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bytes);

            String savedFile = saveImageFile(bitmap, "myFolder");

            Uri imageUri =  Uri.parse(savedFile);
            share.putExtra(Intent.EXTRA_STREAM, imageUri);
            startActivity(Intent.createChooser(share, "Share Image"));

        }
    });
保存图像文件功能

public static String saveImageFile(Bitmap image, String folder){

    String now = Long.toString(new Date().getTime());

    File imageFile = new File(Environment.getExternalStorageDirectory() + folder);
    if (!imageFile.exists()){
        File screenShotsFolder = new File("/sdcard/Pictures/" + folder+ "/");
        screenShotsFolder.mkdirs();
    }

    File imageName = new File(new File("/sdcard/Pictures/" + folder + "/"), now + ".jpg" );

    try{
        FileOutputStream outputStream = new FileOutputStream(imageName);
        image.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
        outputStream.flush();
        outputStream.close();
    }catch (Throwable e){e.printStackTrace();}
    return imageName.toString();
}

喜欢这个
喜欢这个

谢谢@Harshil Kakadiyait这是我的荣幸。。!!谢谢@Harshil Kakadiya这是我的荣幸。。!!谢谢Lucern…,它对whatsapp有效,但对instagram无效…谢谢Lucern…,它对whatsapp有效,但对instagram无效…谢谢@Santanu-Sur,但我在使用FileProvider后收到一个空指针异常,但我不明白为什么收到它??谢谢@Santanu-Sur,但在使用FileProvider之后,我收到了一个空指针异常,但我不明白为什么我会收到它??