我正在尝试共享存储在我的应用程序的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)
但它也不起作用。有人可以帮帮我吗?
答案 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;
}
:)