Rad Studio 11でのRequestPermissions

解決


Tomo  2021-10-28 08:52:41  No: 149911  IP: 192.*.*.*

Rad Studio 10.4で動作していたスマホアプリを Rad Studio 11でビルドしたところ、
E2250 指定された引数で呼び出すことのできるオーバーロード関数 'RequestPermissions' が定義されていません
というエラーになりました。

そこで、https://delphiworlds.com/2021/09/taking-it-to-11/ の「Important Breaking Change」に従い、
TRequestPermissionsResultEvent と TDisplayRationaleEvent の引数の型を変更したところ、
ビルドが通り、Androidデバイスにアプリを配置することはできましたが、
今度は、RequestPermissions を実行したタイミングで、
Exception.ClassName = 'EJNI', Exception.Message = 'Java の型 Jcontent_ContextCompat が見つかりません'
の例外が発生してしまいました。

この問題を解決するには何をすればいいでしょうか?

編集 削除
Tomo  2021-10-29 00:38:45  No: 149912  IP: 192.*.*.*

その後、例外発生までの間をステップ実行できることが分かり、エラー発生箇所を特定することができました。

System.Android.Permissions(C:\Program Files (x86)\Embarcadero\Studio\22.0\source\rtl\common)の
TAndroidPermissionsService.RequestPermissions()
TAndroidPermissionsService.InternalRequestPermissions()
を経た、

function TAndroidPermissionsService.IsPermissionGranted(const APermission: string): Boolean;
begin
  Result := TJcontent_ContextCompat.JavaClass.checkSelfPermission(TAndroidHelper.Context,
    StringToJString(APermission)) = TJPackageManager.JavaClass.PERMISSION_GRANTED
end;
の Result := TJcontent_ContextCompat.JavaClass.checkSelfPermission... の行でした。

TJcontent_ContextCompat は Androidapi.JNI.Support で定義されていましたが、対処法が分かりません。
ご教示いただきたく存じます。よろしくお願いいたします。

編集 削除
Tomo  2021-10-30 08:34:09  No: 149913  IP: 192.*.*.*

自己解決しましたのでお知らせします。

https://docwiki.embarcadero.com/RADStudio/Alexandria/ja/%E6%96%B0%E6%A9%9F%E8%83%BD
のページ中ほどよりもう少し下に、次のような記載があります。

Android API 30 のサポート
新しいリリースには異なる Java ライブラリのセットが含まれているため、古いプロジェクトには互換性がありません。『古いバージョンの RADStudio で Android プロジェクトビルドを開く』場合は、次のことを行う必要があります:
・ドッキング可能な[プロジェクト]ウィンドウに移動します。
・アクティブ ターゲット プラットフォームとして、Android 32 ビットか Android 64 ビットを選択します。
・ライブラリ ノードを右クリックします。
・メニュー項目[システム ファイルをデフォルトに戻す]をクリックします。

ただし、肝心の『』内の日本語訳が間違っていて、正しくは
『古いバージョンのRAD Studioでビルドされたプロジェクトを開く』場合は、次のことを行う必要があります。
です(https://docwiki.embarcadero.com/RADStudio/Alexandria/en/What%27s_New 参照)。

RAD Studio 11側でこの手順を行ったところ、エラーが発生することなく、
写真と動画の撮影を「○○○」に許可しますか?
といったダイアログが表示されるようになりました。

ありがとうございました。

編集 削除
HFUKUSHI  2021-11-02 01:59:58  No: 149914  IP: 192.*.*.*

誤訳ですねぇ。QPに登録しときました。
https://quality.embarcadero.com/browse/RSP-36067

編集 削除