使用Intent在Android上共享数据

卡尔杜克

我在应用之间在android上共享内容时遇到问题,有了Intent,我就可以成功共享纯文本(在G +,Facebook和Facebook Messenger上),代码如下:

Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_TEXT,"Your score is: "+Integer.toString(mScore));
shareIntent.setType("text/plain");
startActivity(Intent.createChooser(shareIntent, getResources().getText(R.string.send_to)));

但是,当涉及到图像时,一切都不起作用。目的是创建和我可以在应用程序之间实际选择共享与图像,但是当所选择的应用程序会尝试启动,它只是崩溃和无法打开。没有应用程序有效(已通过9Gag,G +,Facebook,Facebook Messenger,Photos ..测试)。我正在使用的代码是:

Intent shareIntent = new Intent();
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM, uriToImage);
shareIntent.setType("image/png");
startActivity(Intent.createChooser(shareIntent, getResources().getText(R.string.send_to)));

图像存储在/data/data/com.test.carloalberto.myapp/files/score.png上,这是我之前保存图像的正确路径。

尝试共享图像时,为什么其他应用程序会崩溃?

感谢您的回复。


编辑:我将图像存储在公共图片目录中,但是尝试共享图像的fb Messenger等应用仍然崩溃!

这是新代码:

File dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
String name = "score.jpg";

File file = new File(dir,name);
FileOutputStream ostream;

 try {
        if(!dir.exists()) {
           Log.i("Share: onClick()","Creating directory "+dir);
           dir.mkdirs();
        }

      Log.i("Share: onClick()","Final path: "+file.getAbsolutePath());
      file.createNewFile();

      ostream = new FileOutputStream(file);
      Log.i("onClick(): Share action: ","Path: "+file.getAbsolutePath());

      bitmap.compress(Bitmap.CompressFormat.JPEG,100,ostream);
      ostream.close();


      Uri uriToImage = Uri.parse(file.getAbsolutePath());
      Log.i("onClick(): Share action, final uri ",uriToImage.toString());

      Intent shareIntent = new Intent();
      shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
      shareIntent.setAction(Intent.ACTION_SEND);
      shareIntent.putExtra(Intent.EXTRA_STREAM, uriToImage);
      shareIntent.setType("image/jpeg");
      startActivity(Intent.createChooser(shareIntent,getResources().getText(R.string.send_to)));

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

现在,文件路径为:/mnt/sdcard/Pictures/score.jpg,该路径应该是公共的,并且所有其他应用程序都可以访问。(显然,我也在清单文件中设置了权限)

德鲁

/data/* 路径不适用于应用程序(每个* nix用户都应了解的文件系统安全模型)。

您能够在已root用户的设备上访问此文件夹的事实并不意味着该应用程序可以执行相同操作。

您可以将图像存储在公共可用目录(例如设备的Pictures文件夹等)中,也可以尝试使用以下方案为您的资产构造URI:

android.resource://[package]/[res type]/[res name]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Android Intent与Appcelerator共享文件

如何使用 Android Intent System 在 whatsapp 上与最少 n 人共享文本

Android:如何通过Intent在Facebook上与文字共享图像?

Instagram的视频共享Android Intent

在WhatsApp上共享数据无法在android 11上运行

如何从Android上的Intent中获取更多数据?

Android Wear 2.0是否支持唤醒其他独立应用程序和共享数据的Intent?

尽管使用Intent.EXTRA_STREAM,但共享位图时,API 28+上的TransactionTooLargeException

MVVM Kotlin在活动之间共享数据,而无需使用Intent和SharePreferences

如何使用Android Share Intent Chooser(ACTION_SEND)收听/捕捉社交媒体共享的成功事件?

Android:使用Intent共享纯文本(向所有消息传递应用程序)

在android中使用Intent将图像共享到另一个应用程序

如何使用 Intent 通过 android studio 中的活动传递数据

使用 Intent 共享音频文件

如何使用Flutter在iOS和Android上共享图像?

在Android上使用Kotlin共享意图文本

如何使用Flutter在iOS和Android上共享多图像?

在Firebase上与朋友共享数据

使用 android clean 架构在用例之间共享域数据

使用Intent在Android应用中共享图像会将其作为文本文件而不是照片发送

Android 在 ListView 上使用 HashMap 数据

使用Android从网络上获取数据?

使用UIActivityViewController在Linkedin上共享

使用LAN上的Mono上传到Android设备上的Windows网络共享

使用URL android共享意图共享图像

使用Intent的Android编程错误

Laravel:在多个域上共享会话数据

在共享指针上看到意外数据

当我的android应用尝试使用intent在Instagram上发布帖子时,Instagram崩溃