ここで私はDelphiでどのようにしたのですか。 TakePhotoFromCameraActionアクションを使用している場合は、NeedSaveToAlbumをtrueに設定することを忘れないでください。今、NeedSaveToAlbumはAndroidの問題のために動作しませんが、将来は動作します。 また、手動でネイティブのAndroidのカメラの意図を呼び出し、画像をキャプチャすることができます(Delphiでそれを行う方法 - hereを説明)
unit Misc.Android;
interface
uses
SysUtils,
Androidapi.JNI.GraphicsContentViewText, Androidapi.Helpers, Androidapi.JNI.JavaTypes,
Androidapi.JNIBridge, Androidapi.JNI.Provider;
type
TGallery = class
public
class function GetLastImageID: integer;
class function GetNextImageIDFromID(aFromID: integer; out aImagePath: string): integer;
class function DeleteImageByID(aID: integer): boolean;
end;
implementation
const
_ID = '_id'; // TJBaseColumns.JavaClass._ID // uri in Androidapi.JNI.Provider
{ TGallery }
{If you're using action TakePhotoFromCameraAction remember to set NeedSaveToAlbum to true.
It does not work, because of Android problems, but it can work in future.}
class function TGallery.GetLastImageID: integer;
var
vContent: JContentResolver;
vValues: TJavaObjectArray<JString>;
vOrderBy: JString;
vCursor: JCursor;
begin
Result := -1;
vContent := TAndroidHelper.Activity.getContentResolver;
vValues := TJavaObjectArray<JString>.Create(1);
vValues[0] := TJBaseColumns.JavaClass._ID;
vOrderBy := StringToJString(_ID + ' DESC');
vCursor := vContent.query(TJImages_Media.JavaClass.EXTERNAL_CONTENT_URI,
vValues, nil, nil, vOrderBy);
try
if vCursor.moveToFirst then
Result := vCursor.getInt(vCursor.getColumnIndex(TJBaseColumns.JavaClass._ID));
finally
vCursor.close;
end
end;
// Result is next Image ID and its aImagePath - is path to jpg image
class function TGallery.GetNextImageIDFromID(aFromID: integer; out aImagePath: string): integer;
var
vContent: JContentResolver;
vValues: TJavaObjectArray<JString>;
vFilter: JString;
vOrderBy: JString;
vArgs : TJavaObjectArray<JString>;
vCursor: JCursor;
begin
Result := -1;
aImagePath := '';
vContent := TAndroidHelper.Activity.getContentResolver;
vValues := TJavaObjectArray<JString>.Create(2);
vValues[0] := TJMediaStore_MediaColumns.JavaClass.DATA;
vValues[1] := TJBaseColumns.JavaClass._ID;
// vValues[1] := TJMediaStore_MediaColumns.JavaClass.SIZE;
// vValues[1] := TJImages_ImageColumns.JavaClass.DATE_TAKEN;
vOrderBy := StringToJString(_ID + ' DESC');
vFilter := StringToJString(_ID + '>?');
vArgs := TJavaObjectArray<JString>.Create(1);
vArgs[0] := StringToJString(aFromID.ToString);
vCursor := vContent.query(TJImages_Media.JavaClass.EXTERNAL_CONTENT_URI,
vValues, vFilter, vArgs, vOrderBy);
try
if (vCursor.getCount > 0) and vCursor.moveToFirst then
begin
Result := vCursor.getInt(vCursor.getColumnIndex(TJBaseColumns.JavaClass._ID));
// vCursor.getLong(imageCursor.getColumnIndex(MediaStore.Images.Media.DATE_TAKEN));
//vSize := wCursor.getLong(wCursor.getColumnIndex(TJMediaStore_MediaColumns.JavaClass.SIZE));
aImagePath := JStringToString(vCursor.getString(
vCursor.getColumnIndex(TJMediaStore_MediaColumns.JavaClass.DATA)));
end;
finally
vCursor.close;
end;
end;
class function TGallery.DeleteImageByID(aID: integer): boolean;
var
vContent: JContentResolver;
begin
vContent := TAndroidHelper.Activity.getContentResolver;
Result := vContent.delete(TJImages_Media.JavaClass.EXTERNAL_CONTENT_URI,
StringToJString(_ID + '=' + aID.ToString), nil) = 1;
end;
end.
'フォトギャラリーにすることはできませんが、代わりにナンセンスである特定directory.'でなければなりません。ギャラリーアプリはストレージスペースではなく、あなたのデバイス上のすべてのイメージを表示するアプリです。すべての画像ファイルはディレクトリにあります。ファイルはどこにあるはずですか?あなたの問題を言い換えてください。 – greenapps
Android Galleryは仮想ストレージで、AndroidのMediaScannerはSDカードのフォルダをスキャンし、ギャラリーに追加します。 Androidは通常、TPath.GetSharedCameraPathに写真を保存しますが、その場所からファイルを削除すると、まだギャラリーにあります。既に確認済みです。キャッシュされたファイルであるかどうかわかりません。 '写真はギャラリーにあることはできませんが、特定のカスタムディレクトリになければなりません。 ' – alitrun
全くストレージがありません。ギャラリーアプリはまだそこにあるMediaStoreのサムネイルを使用できます。あなたは、ファイルがなくなったことをメディアストアに知らせなければなりません。または、デバイスを再起動します。 – greenapps