当前位置: 首页 > 知识库问答 >
问题:

有意在Android上共享数据

年健
2023-03-14

我在应用程序之间在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)));

但是,当谈到图像时,事情并不奏效。Intent已经创建,我实际上可以在与之共享图像的应用程序之间进行选择,但当所选应用程序尝试启动时,它只是崩溃,无法打开。没有应用程序工作(使用9Gag、G、Facebook、Facebook Messenger、照片等进行测试)我使用的代码是:

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上。测验卡洛·阿尔贝托。我的应用程序/文件/分数。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,它应该是公共的,所有其他应用程序都可以访问。(显然我也在清单文件中设置了权限)

共有2个答案

刘绍晖
2023-03-14

试试这个。

private void shareIntent(String type,String text){
     File filePath = getFileStreamPath("shareimage.jpg");
     Intent shareIntent = new Intent();
     shareIntent.setAction(Intent.ACTION_SEND);
     shareIntent.putExtra(Intent.EXTRA_TEXT, text);
     shareIntent.putExtra(Intent.EXTRA_STREAM,Uri.fromFile(new File(filePath)));  

     shareIntent.setType("image/*"); //"image/*" or "image/jpeg", etc
     shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
     startActivity(Intent.createChooser(shareIntent, "send"));
}
毕富
2023-03-14

/data/*路径对应用程序不可用(每个*nix用户都应该知道的文件系统的安全模型)。

事实上,你可以在你的根设备上访问这个文件夹并不意味着应用程序也可以这样做。

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

android。资源://[包]/[资源类型]/[资源名称]

 类似资料:
  • 我很困惑。 我们假设CalculatorClient useCalc被多次调用不同的操作。最终,中的将包含在该计算器上完成的所有操作。 所以问题是这样的: 这个Spring的局限性--不能在类内的方法之间有效地共享信息吗?如果是这样,如何在方法之间共享这种信息? 我知道有原型bean作用域。这是唯一的解决办法吗?顺便说一句,在这里prototype不是一个解决方案,因为使用prototype将在每

  • 我有我导出到数据uri图像的HTML画布。现在我想通过点击我页面上的自定义链接,在Facebook时间线上尽可能轻松地分享这张图片(无需创建FB应用程序和身份验证令牌)。 我试过这样的方法: 图像生成: 共享链接: 当我点击链接Safari我得到 如何通过Facebook共享者URL(或其他方式)轻松共享数据uri图像? 谢谢你的回答!

  • 我使用这个代码,但它不能正常工作。 当我使用text类型时,它可以正常工作。 但是我想共享一个文本和一个图像。 而共享的意图在Facebook中不起作用。

  • 我正在使用ShareKit在Facebook上共享一条简单的文本。我使用cocoapods在我的应用程序上安装ShareKit(使用iOS7和XCode5),并遵循配置教程ConfigurationShareKit。更具体地说,我会做以下事情: 1) 将URL方案写入plist。 2) 创建DefaultShkConfiguration子类: 3)在AppServer ate中进行初始配置: 4)

  • 问题内容: 首先,我想说两件事。首先,很抱歉,如果已经有人问过这个问题,我已经搜索了与此主题相关的类似问题,但找不到解决方案。其次,对于冗长的问题,我们深表歉意,如有任何错误,请通知我,我将确保做出适当的更改:)。 我是Android开发的新手(大约2个月),所以请原谅我的无知。我有关于Android服务的问题。 我的问题如下,我创建了以下3个应用程序: 一个包含小型测试服务( myService