如何在 DELPHI XE8 中打开彩信中的图像

How to open image from MMS in DELPHI XE8

我有一个应用程序可以自动读取收到的彩信。

他发消息时带附件(图片)所以我得到图片保存的目录:

.
.
.
uri:= StrToJURI('content://mms/part');
uriQuery:= StringToJString('mid = 122');
cursor:= SharedActivity.getContentResolver.query(uri, nil, uriQuery, nil, nil);
imgPath:= JStringToString(cursor.getString(cursor.getColumnIndex(StringToJString('_data'))));
.
.
.

imgPath 例如:'/data/data/com.android.providers.telephony/app_parts/PART_1440873132846_image.jpeg '.

当我尝试打开此文件时,它报告错误:“无法打开文件 - 权限被拒绝”。

有人告诉我如何打开这个文件(彩信图片)?

您正在尝试打开属于另一个应用程序的文件。 Android 通常不允许这样做,除非其他应用明确共享该文件。在这种情况下,它显然没有这样做。

您可以尝试使用另一个 content: URL 根据 MMS 消息中的 ID 而不是实际文件名来访问文件:

uri := StrToJURI('content://mms/part');
uriQuery := StringToJString('mid = 122');
cursor := SharedActivity.getContentResolver.query(uri, nil, uriQuery, nil, nil);
partID := StringToString(cursor.getString(cursor.getColumnIndex(StringToJString('_id'))));

uri := StrToJURI('content://mms/part/' + partID);
is := SharedActiviy.getContentResolver.openInputStream(uri); // returns a JInputStream 
try
  bitmap := TJBitmapFactory.JavaClass.decodeStream(is); // returns a JBitmap
finally
  is.close;
end;
// use bitmap as needed...