Android : Share drawable resource with other apps

前端 未结 3 1942
有刺的猬
有刺的猬 2021-01-25 02:36

In my activity I have an ImageView. I want ,when user click on it, a dialog opens (like intent dialogs) that show list of apps which can open image than user can choose a app an

3条回答
  •  隐瞒了意图╮
    2021-01-25 03:24

    You can't pass a bitmap to an intent.

    From what I see you want to share a drawable from your resources. So first you have to convert the drawable to a bitmap. And then You have to save the bitmap to the external memory as a file and then get a uri for that file using Uri.fromFile(new File(pathToTheSavedPicture)) and pass that uri to the intent like this.

    shareDrawable(this, R.drawable.dish, "myfilename");
    
    public void shareDrawable(Context context,int resourceId,String fileName) {
        try {
            //convert drawable resource to bitmap
            Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), resourceId);
    
            //save bitmap to app cache folder
            File outputFile = new File(context.getCacheDir(), fileName + ".png");
            FileOutputStream outPutStream = new FileOutputStream(outputFile);
            bitmap.compress(CompressFormat.PNG, 100, outPutStream);
            outPutStream.flush();
            outPutStream.close();
            outputFile.setReadable(true, false);
    
            //share file
            Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
            shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(outputFile));
            shareIntent.setType("image/png");
            context.startActivity(shareIntent);
        } 
        catch (Exception e) { Toast.makeText(context, "error", Toast.LENGTH_LONG).show();
        }
    }
    

提交回复
热议问题