与意图共享资源图像

时间:2018-04-02 13:47:28

标签: android android-intent android-resources android-sharing

我正在尝试共享存储在我的应用程序的image/jpg资源文件夹中的raw,但Intent似乎找不到图像资源并且什么都不发送。

以下是我的发送代码( in Kotlin ):

val current = filePaths!![mViewPager!!.currentItem]
val uri = Uri.parse("android.resource://" + getPackageName() + "/" + current.resourceId)
val shareIntent : Intent = Intent()
shareIntent.setAction(Intent.ACTION_SEND)
shareIntent.putExtra(Intent.EXTRA_STREAM, uri)
shareIntent.setType("image/*")
startActivity(Intent.createChooser(shareIntent, getResources().getText(R.string.send_to)))

我也尝试以这种方式发送Uri

val uri = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + File.pathSeparator + File.separator + File.separator + getPackageName() + "/raw/" + filename)

但它也不起作用。有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:2)

The Uri passed via EXTRA_STREAM needs to be a content Uri。虽然一些支持ACTION_SNED的应用程序更灵活,但很少有人会处理几乎完全未使用的android.resource方案。

实施ContentProvider为您的内容提供服务,并在Uri中使用Intent来填充该内容。另外,在Intent中使用具体的MIME类型 - 这是您的内容,因此您知道MIME类型是什么。

答案 1 :(得分:0)

经过3天的头痛,我终于解决了......我所做的只是保存图像资源,然后提供服务:

#include <stdio.h>

unsigned char *read_bmp(char *fname, int size, unsigned char* header, unsigned char* img){
  FILE *source = fopen(fname, "r");
  for(int i = 0; i < 54; i++){
    header[i] = fgetc(source);
  }
  for(int i = 0; i < size*size; i++){
    //need only every third byte
    img[i] = fgetc(source);
    fgetc(source);
    fgetc(source);
  } 
  fclose(source);
}

void write_bmp(char *fname, int size, unsigned char* header, unsigned char* img){
  FILE *dest = fopen(fname, "w");
  for(int i = 0; i < 54; i++){
    fputc(header[i], dest);
  } 
  for(int i = 0; i < size*size; i++){
    //need to tripple every byte
    fputc(img[i], dest);
    fputc(img[i], dest);
    fputc(img[i], dest);
  }   
  fclose(dest);
}

int main(){
  int size = 126; //size is set manually to the size of the image
  unsigned char header[54];
  unsigned char img[size*size];
  read_bmp("source.bmp", size, header, img);
  write_bmp("dest.bmp", size, header, img);

  return 0;
}

:)