【问题标题】:How to share image of imageview?如何分享imageview的图像?
【发布时间】:2014-01-13 06:04:31
【问题描述】:

我有 ImageView,我想分享它的图像。

以下是我的代码,

btshare.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

                 View content = findViewById(R.id.full_image_view);
                 content.setDrawingCacheEnabled(true);
                     Bitmap bitmap = content.getDrawingCache();
                     File root = Environment.getExternalStorageDirectory();
                     File cachePath = new File(root.getAbsolutePath() + "/DCIM/Camera/image.jpg");
                     try 
                     {
                         root.createNewFile();
                         FileOutputStream ostream = new FileOutputStream(root);
                         bitmap.compress(CompressFormat.JPEG, 100, ostream);
                         ostream.close();
                     } 
                     catch (Exception e) 
                     {
                         e.printStackTrace();
                     }


                 Intent shareIntent = new Intent(Intent.ACTION_SEND);
                 Uri phototUri = Uri.parse("/DCIM/Camera/image.jpg");
                 shareIntent.setData(phototUri);
                 shareIntent.setType("image/*");
                 shareIntent.putExtra(Intent.EXTRA_STREAM, phototUri);
                 startActivity(Intent.createChooser(shareIntent, "Share Via"));

             }  



    });

当我按下按钮时出现这些错误?

01-13 06:00:19.282: W/System.err(6199): java.io.FileNotFoundException: /storage/emulated/0: open failed: EISDIR (Is a directory)
01-13 06:00:19.286: W/System.err(6199):     at libcore.io.IoBridge.open(IoBridge.java:409)
01-13 06:00:19.286: W/System.err(6199):     at java.io.FileOutputStream.<init>(FileOutputStream.java:88)
01-13 06:00:19.294: W/System.err(6199):     at java.io.FileOutputStream.<init>(FileOutputStream.java:73)
01-13 06:00:19.294: W/System.err(6199):     at com.safshari.mandegar.FullImageActivity$3.onClick(FullImageActivity.java:116)
01-13 06:00:19.294: W/System.err(6199):     at android.view.View.performClick(View.java:4240)
01-13 06:00:19.294: W/System.err(6199):     at android.view.View$PerformClick.run(View.java:17721)
01-13 06:00:19.298: W/System.err(6199):     at android.os.Handler.handleCallback(Handler.java:730)
01-13 06:00:19.298: W/System.err(6199):     at android.os.Handler.dispatchMessage(Handler.java:92)
01-13 06:00:19.298: W/System.err(6199):     at android.os.Looper.loop(Looper.java:137)
01-13 06:00:19.302: W/System.err(6199):     at android.app.ActivityThread.main(ActivityThread.java:5103)
01-13 06:00:19.302: W/System.err(6199):     at java.lang.reflect.Method.invokeNative(Native Method)
01-13 06:00:19.302: W/System.err(6199):     at java.lang.reflect.Method.invoke(Method.java:525)
01-13 06:00:19.302: W/System.err(6199):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
01-13 06:00:19.306: W/System.err(6199):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
01-13 06:00:19.306: W/System.err(6199):     at dalvik.system.NativeStart.main(Native Method)
01-13 06:00:19.310: W/System.err(6199): Caused by: libcore.io.ErrnoException: open failed: EISDIR (Is a directory)
01-13 06:00:19.310: W/System.err(6199):     at libcore.io.Posix.open(Native Method)
01-13 06:00:19.310: W/System.err(6199):     at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
01-13 06:00:19.310: W/System.err(6199):     at libcore.io.IoBridge.open(IoBridge.java:393)
01-13 06:00:19.314: W/System.err(6199):     ... 14 more
01-13 06:00:19.618: E/Genymotion(489): Could not open '/sys/class/power_supply/genymotion_fake_path/present'

我应该做什么以及我的程序需要什么权限?我已经声明了以下权限,

<uses-permission android:name="android.permission.SET_WALLPAPER"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

【问题讨论】:

    标签: android imageview save share


    【解决方案1】:

    最终代码,因此任何人都可以使用 imageview 保存和共享图像:

    View content = findViewById(R.id.full_image_view);
                     content.setDrawingCacheEnabled(true);
    
                         Bitmap bitmap = content.getDrawingCache();
                         File root = Environment.getExternalStorageDirectory();
                         File cachePath = new File(root.getAbsolutePath() + "/DCIM/Camera/image.jpg");
                         try {
                             cachePath.createNewFile();
                             FileOutputStream ostream = new FileOutputStream(cachePath);
                             bitmap.compress(CompressFormat.JPEG, 100, ostream);
                             ostream.close();
                         } catch (Exception e) {
                             e.printStackTrace();
                         }
    
    
                         Intent share = new Intent(Intent.ACTION_SEND);
                         share.setType("image/*");
                         share.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(cachePath));
                         startActivity(Intent.createChooser(share,"Share via"));
    
                 }  
    

    快乐编码

    【讨论】:

    • 我可以从图像视图而不是文件/url 共享吗?
    • 谢谢,但它不起作用。我得到:java.io.IOException:没有这样的文件或目录。
    【解决方案2】:

    试试下面的代码来分享你的图片:

        Intent share = new Intent(Intent.ACTION_SEND);
        share.setType("image/*");
        share.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(root.getAbsolutePath() + "/DCIM/Camera/image.jpg"));
        startActivity(Intent.createChooser(share,"Share via"));
    

    将这些权限添加到AndroidMenifest.xml

      <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    

    【讨论】:

    • 如果它解决了您的问题,那么不要忘记将其标记为正确答案。
    • 为什么需要摄像头权限? @zanky
    • 不能使用这三个权限和上面的代码。通过蓝牙没有任何反应,通过其他程序说文件无效
    • 我在这一行也有一个警告说 cachepath never used File cachePath = new File(root.getAbsolutePath() + "/DCIM/Camera/image.jpg");
    • 01-13 10:32:44.381: D/AbsListView(12194): unregisterIRListener() 被调用 01-13 10:32:45.066: D/AbsListView(12194): onDetachedFromWindow 01-13 10 :32:45.066: D/AbsListView(12194): unregisterIRListener() 被称为@zanky
    【解决方案3】:

    你需要添加这个权限

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    

    【讨论】:

      【解决方案4】:

      尝试先创建缓存来存储此图像,然后再共享它,因为您只能共享对其他应用程序也公开的图像。您不能共享对您的应用程序私有的内容。

      使用 Context.getExternalCacheDir() 创建缓存,然后共享这个缓存的内容

      【讨论】:

        【解决方案5】:
        Bundle intent = getIntent().getExtras();
        cardView = (CardView) findViewById(R.id.card);
        final String query = intent.getString("Query1");
        
        db = new DataBaseHelper(Image.this);
        
        Cursor c = db.getData(query);
        
        if (c.getCount() != 0) {
            c.moveToFirst();
        
            do {
                image = c.getString(5);
                title=c.getString(3);
            } while (c.moveToNext());
        }
        
        txt.setText(title);
        
        img.setImageDrawable(getResources()
            .getDrawable(getResources().getIdentifier(image, "drawable", getPackageName())));
        

        【讨论】:

        • 如何通过intent分享图片
        【解决方案6】:
        • 从图像视图中获取位图
        imageview.buildDrawingCache();
        Bitmap image = mainimg.getDrawingCache();
        
        • 转换网址
        public Uri getImageUri(Context inContext, Bitmap inImage) {
          ByteArrayOutputStream bytes = new ByteArrayOutputStream();
          inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
          String path = Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null);
          return Uri.parse(path);
        }
        
        • 然后分享按钮
        Intent share = new Intent(Intent.ACTION_SEND);
        share.setType("image/*");
        share.putExtra(Intent.EXTRA_STREAM, getImageUri(this,getImageUri));
        startActivity(Intent.createChooser(share,"Share via"));
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-10-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多