java - 如何使用从url分享图片的方法

标签 java android

目前,我正在使用 Picasso 库下载图像并将其保存在设备中并与其他人共享,问题是当我按下共享按钮时它不起作用并将我发送到 mainActivity。 那我该如何解决呢?这是我的代码

我用来分享图片的方法

public class PicassoDisplayImageAdapter extends AppCompatActivity {

Button share_image;
ImageView imageView ;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_display_image);

    /* button to share image */
    share_image = findViewById(R.id.button_share);
    imageView = findViewById(R.id.image_display);
    share_image.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            onShareItem(imageView);
            }
    });

}

// Can be triggered by a view event such as a button press
public void onShareItem(View v) {
    // Get access to bitmap image from view
    ImageView ivImage = findViewById(R.id.image_display);
    // Get access to the URI for the bitmap
    Uri bmpUri = getLocalBitmapUri(ivImage);
    if (bmpUri != null) {
        // Construct a ShareIntent with link to image
        Intent shareIntent = new Intent();
        shareIntent.setAction(Intent.ACTION_SEND);
        shareIntent.putExtra(Intent.EXTRA_STREAM, bmpUri);
        shareIntent.setType("image/*");
        // Launch sharing dialog for image
        startActivity(Intent.createChooser(shareIntent, "Share Image"));
    } else {
        // ...sharing failed, handle error
    }
}

// Returns the URI path to the Bitmap displayed in specified ImageView
public Uri getLocalBitmapUri(ImageView imageView) {
    // Extract Bitmap from ImageView drawable
    Drawable drawable = imageView.getDrawable();
    Bitmap bmp = null;
    if (drawable instanceof BitmapDrawable){
        bmp = ((BitmapDrawable) imageView.getDrawable()).getBitmap();
    } else {
        return null;
    }
    // Store image to default external storage directory
    Uri bmpUri = null;
    try {
        File file =  new File(Environment.getExternalStoragePublicDirectory(
                Environment.DIRECTORY_DOWNLOADS), "share_image_" + System.currentTimeMillis() + ".png");
        file.getParentFile().mkdirs();
        FileOutputStream out = new FileOutputStream(file);
        bmp.compress(Bitmap.CompressFormat.PNG, 90, out);
        out.close();
        bmpUri = Uri.fromFile(file);
    } catch (IOException e) {
        e.printStackTrace();
    }
    return bmpUri;
}

}

所有 Activity PicassoDisplayImageAdapter

 /*
 * This class for display the image when click on it
 * It is get the data from the class have the images "Images in ArrayList"
 */
public class PicassoDisplayImageAdapter extends AppCompatActivity {

public static final int PERMISSION_WRITE = 0;
Button download_image,back_icon,share_image;
ImageView imageView ;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_display_image);

    /* make the app support only arabic "Right to left" */
    // even if the language of the device on english or others
    ViewCompat.setLayoutDirection(getWindow().getDecorView(),ViewCompat.LAYOUT_DIRECTION_RTL);

    /* Display the data in the ImageView with Picasso "ImageView that insert in he activity" */
    imageView = findViewById(R.id.image_display);
    final Intent intent = getIntent();
    if (intent.hasExtra("imageUrl")){
        String url = intent.getStringExtra("imageUrl");
        Picasso
                .with(this)
                .load(url)
                .error(R.drawable.error)
                .into(imageView);
    }

    /* to zoom in image like Instagram */
    Zoomy.Builder builder = new Zoomy.Builder(this).target(imageView);
    builder.register();

    /* button to download the image */
    download_image = findViewById(R.id.button_download);
    checkPermission();
    download_image.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (checkPermission()) {
                String URL = intent.getStringExtra("imageUrl");
                /* to get image name from url */
                URI uri = null;
                try {
                    uri = new URI(URL );
                } catch (URISyntaxException e) {
                    e.printStackTrace();
                }
                URL videoUrl = null;
                try {
                    videoUrl = uri.toURL();
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                }
                File tempFile = new File(videoUrl.getFile());
                String fileName = tempFile.getName();
                saveMyImage ("تطبيق المؤمن",URL,fileName);
            }
        }
    });

    /* button to share image */
    share_image = findViewById(R.id.button_share);
    share_image.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            onShareItem(imageView);
            }
    });

    /* button to back to last activity*/
    back_icon = findViewById(R.id.button_back);
    back_icon.setOnClickListener(new View.OnClickListener() {
        // The code in this method will be executed when the family category is clicked on.
        @Override
        public void onClick(View view) {
            finish();
        }
    });
}

// load Bitmap to method save image
private static Bitmap loadBitmap(String url) {
    try {
        InputStream in = new java.net.URL(url).openStream();
        return BitmapFactory.decodeStream(in);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

// Can be triggered by a view event such as a button press
public void onShareItem(View v) {
    // Get access to bitmap image from view
    ImageView ivImage = findViewById(R.id.image_display);
    // Get access to the URI for the bitmap
    Uri bmpUri = getLocalBitmapUri(ivImage);
    if (bmpUri != null) {
        // Construct a ShareIntent with link to image
        Intent shareIntent = new Intent();
        shareIntent.setAction(Intent.ACTION_SEND);
        shareIntent.putExtra(Intent.EXTRA_STREAM, bmpUri);
        shareIntent.setType("image/*");
        // Launch sharing dialog for image
        startActivity(Intent.createChooser(shareIntent, "Share Image"));
    } else {
        // ...sharing failed, handle error
    }
}

// Returns the URI path to the Bitmap displayed in specified ImageView
public Uri getLocalBitmapUri(ImageView imageView) {
    // Extract Bitmap from ImageView drawable
    Drawable drawable = imageView.getDrawable();
    Bitmap bmp = null;
    if (drawable instanceof BitmapDrawable){
        bmp = ((BitmapDrawable) imageView.getDrawable()).getBitmap();
    } else {
        return null;
    }
    // Store image to default external storage directory
    Uri bmpUri = null;
    try {
        File file =  new File(Environment.getExternalStoragePublicDirectory(
                Environment.DIRECTORY_DOWNLOADS), "share_image_" + System.currentTimeMillis() + ".png");
        file.getParentFile().mkdirs();
        FileOutputStream out = new FileOutputStream(file);
        bmp.compress(Bitmap.CompressFormat.PNG, 90, out);
        out.close();
        bmpUri = Uri.fromFile(file);
    } catch (IOException e) {
        e.printStackTrace();
    }
    return bmpUri;
}

/* method to save image*/
void saveMyImage (String appName, String imageUrl, String imageName) {

    Bitmap bmImg = loadBitmap(imageUrl);
    File filename;
    try {
        String path1 = Environment.getExternalStorageDirectory()
                .toString();
        File file = new File(path1 + "/" + appName);
        if (!file.exists())
            file.mkdirs();
        filename = new File(file.getAbsolutePath() + "/" + imageName
                + ".jpg");
        FileOutputStream out = new FileOutputStream(filename);
        bmImg.compress(Bitmap.CompressFormat.JPEG, 100, out);
        out.flush();
        out.close();
        ContentValues image = new ContentValues();
        image.put(Images.Media.TITLE, appName);
        image.put(Images.Media.DISPLAY_NAME, imageName);
        image.put(Images.Media.DESCRIPTION, "App Image");
        image.put(Images.Media.DATE_ADDED, System.currentTimeMillis());
        image.put(Images.Media.MIME_TYPE, "image/jpg");
        image.put(Images.Media.ORIENTATION, 0);
        File parent = filename.getParentFile();
        image.put(Images.ImageColumns.BUCKET_ID, parent.toString()
                .toLowerCase().hashCode());
        image.put(Images.ImageColumns.BUCKET_DISPLAY_NAME, parent.getName()
                .toLowerCase());
        image.put(Images.Media.SIZE, filename.length());
        image.put(Images.Media.DATA, filename.getAbsolutePath());
        Uri result = getContentResolver().insert(
                Images.Media.EXTERNAL_CONTENT_URI, image);
        Toasty.normal(getApplicationContext(), "تم حفظ الصورة في مجلد تطبيق المؤمن", Toast.LENGTH_LONG).show();

    } catch (Exception e) {
        e.printStackTrace();
    }
}

/* runtime storage permission */
public boolean checkPermission() {
    int READ_EXTERNAL_PERMISSION = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE);
    if((READ_EXTERNAL_PERMISSION != PackageManager.PERMISSION_GRANTED)) {
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, PERMISSION_WRITE);
        return false;
    }
    return true;
}

public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode==PERMISSION_WRITE && grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
        //do somethings
    }
}

}

最佳答案

试试这个

        /* button to share image */
    share_image = findViewById(R.id.button_share);
    share_image.setOnClickListener(new View.OnClickListener() {
                                 @Override
                                 public void onClick(View view) {
                                     BitmapDrawable bitmapDrawable = ((BitmapDrawable) imageView.getDrawable());
                                     Bitmap bitmap = bitmapDrawable .getBitmap();
                                     String bitmapPath = Images.Media.insertImage(getContentResolver(),bitmap,"hello bro",null);
                                     Uri bitmapUri = Uri.parse(bitmapPath);
                                     Intent shareIntent=new Intent(Intent.ACTION_SEND);
                                     shareIntent.setType("image/jpeg");
                                     shareIntent.putExtra(Intent.EXTRA_STREAM, bitmapUri);
                                     startActivity(Intent.createChooser(shareIntent,"Share Image"));
                                 }
                             });

关于java - 如何使用从url分享图片的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61534690/

相关文章:

android - 通过 ConstraintLayout 和 ConstraintSet 动画更改其大小后,Recyclerview 项目开始重叠

android - 如何让电视项目在被选中时可以展开,比如首页的推荐?

android - 如何获取下一个 3 个月的日期 Android

Java:如何执行未附加到 Windows 控制台的进程?

java - 从另一个 JList 添加列表项到 JList

java - 测量 Servlet 的总网络传输时间

android - android-NullPointerException:尝试调用虚拟方法p()

java - 读取 JSON 响应

java - 如何动态添加某个元素下方的相对布局

java - 编程逻辑 : How to Check for Neighbors in a Grid?