Android:与其他应用程序共享可绘制资源

Android:与其他应用程序共享可绘制资源,android,android-intent,imageview,drawable,Android,Android Intent,Imageview,Drawable,在我的活动中,我有一个ImageView。我想,当用户点击它时,会打开一个对话框(如意向对话框),显示可以打开图像的应用列表,而用户可以选择一个应用并使用该应用显示图像 我的活动代码: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ImageView iv =

在我的活动中,我有一个ImageView。我想,当用户点击它时,会打开一个对话框(如意向对话框),显示可以打开图像的应用列表,而用户可以选择一个应用并使用该应用显示图像

我的活动代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    ImageView iv = (ImageView) findViewById(R.id.imageid);
    iv.setImageResource(R.drawable.dish);
    iv.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //here is where I want a dialog that I mentioned show
                }
    });
}// end onCreate()

您必须
startActivity
使用类型
intent.ACTION\u视图的intent-

            Intent intent = new Intent();
            intent.setAction(Intent.ACTION_VIEW);
            intent.setDataAndType(<your_image_uri>, "image/*");
            startActivity(intent); 
Intent Intent=新Intent();
intent.setAction(intent.ACTION\u视图);
intent.setDataAndType(,“image/*”);
星触觉(意向);

无法将位图传递给目标

据我所知,你想分享你的资源提取。因此,首先必须将可绘制图像转换为位图。然后,您必须将位图作为文件保存到外部内存中,然后使用uri.fromFile(新文件(paththesavedpicture))获取该文件的uri,并像下面这样将该uri传递给intent

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();
    }
}
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();
    }
}