【问题标题】:How to add a custom option(Dowload Image) with other share options in android如何在android中添加自定义选项(下载图像)和其他共享选项
【发布时间】:2017-07-03 09:57:46
【问题描述】:

是否可以在意图选择器中添加自定义选项(例如下载图像)和其他共享选项(如附图所示)?

【问题讨论】:

  • @akash93 感谢分享链接,但这对我没有帮助。请提出其他建议。
  • 你浏览过链接了吗?它包含(更具体地说是this)正是您所需要的
  • @akash93 这无济于事。我们需要在 Intent 选择器中有一个下载选项
  • 那么您还没有通过链接.. 当您使用intent-filterimage mime-type 注册您的应用程序时,您的应用程序收到的回调包含可用于访问文件。这在我之前发布的文档链接中清楚地解释了..

标签: android android-intent-chooser


【解决方案1】:

很遗憾,我没有得到有用的答案。我做了一个解决方法来解决这个问题。

这是添加自定义“保存到图库”选项的代码(如附图所示)

Intent downloadIntent = new Intent(aContext, DownloadActivity.class);
downloadIntent.putExtra("url", url);
intentList.add(new LabeledIntent(downloadIntent, "com.don.offers", "Save To Gallery", R.drawable.ic_save_to_gallery));

// convert intentList to array
LabeledIntent[] extraIntents = intentList.toArray(new LabeledIntent[intentList.size()]);
openInChooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, extraIntents);

这里的 DownloadActivity 是透明的 Activity,有下载图片的代码。

public class DownloadActivity extends AppCompatActivity {

    String imageUrl;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_download);

        imageUrl = getIntent().getStringExtra("url");
        saveToGallery();
        finish();
    }


    public void saveToGallery() {
        try {
            String DIR_NAME = "Don Downloaded Images";
            String filename = "DON_IMG_" + System.currentTimeMillis();
            //String downloadUrlOfImage = "http://fun.localdon.com/DonUGCImg/DON_memes14908366211071492831321991.png";
            String downloadUrlOfImage = imageUrl;
            File direct =
                    new File(Environment
                            .getExternalStoragePublicDirectory(String.valueOf(Environment.DIRECTORY_PICTURES))
                            .getAbsolutePath() + "/" + DIR_NAME + "/");


            if (!direct.exists()) {
                direct.mkdir();
                Log.e("saveToGallery", "dir created for first time");
            }

            DownloadManager dm = (DownloadManager) DownloadActivity.this.getSystemService(Context.DOWNLOAD_SERVICE);
            Uri downloadUri = Uri.parse(downloadUrlOfImage);
            DownloadManager.Request request = new DownloadManager.Request(downloadUri);
            request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE)
                    .setAllowedOverRoaming(false)
                    .setTitle(filename)
                    .setMimeType("image/jpeg")
                    .setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED)
                    .setDestinationInExternalPublicDir(String.valueOf(Environment.DIRECTORY_PICTURES),
                            File.separator + DIR_NAME + File.separator + filename);

            dm.enqueue(request);


            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                final Intent scanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
                final Uri contentUri = Uri.fromFile(direct);
                scanIntent.setData(contentUri);
                DownloadActivity.this.sendBroadcast(scanIntent);
            } else {
                final Intent intent1 = new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory()));
                DownloadActivity.this.sendBroadcast(intent1);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

如果有人有更好的方法,请分享。谢谢

【讨论】:

  • 你从哪里得到intentList?
  • @Adnan 我没有发布整个代码,如果你需要我会做的。 intentList 是数组列表,过滤后的包要显示在 Intent 选择器中。
  • Sapna:好的,请在此处发布整个代码或在我的电子邮件中分享它shouadnan@gmail.com
【解决方案2】:

参考这个答案:Link
示例代码: Github Project

【讨论】:

  • @SapnaSharma 我没有亲自尝试。但是您面临的问题是什么?
猜你喜欢
  • 1970-01-01
  • 2011-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-16
  • 2020-11-13
相关资源
最近更新 更多