Androidアプリの[使用する権限]について


デンカ  2020-02-27 01:52:41  No: 148594  IP: 192.*.*.*

Delphi10.3CEで(しつこく)Androidアプリを作っています。

以下のページを参考にディスプレイのスリープを設定しようとしています。
http://delphi.org/2014/03/setting-android-settings/

ここに書かれているように「permission WRITE_SETTINGS. 」が必要となっていますので、
[アプリケーション]オプションの[使用する権限]の[システム設定への書き込み]をTrueにしました。

http://docwiki.embarcadero.com/RADStudio/Rio/ja/%EF%BC%BB%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E6%A8%A9%E9%99%90%EF%BC%BD
WRITE_SETTINGS:[システム設定への書き込み] 

実行すると、以下のエラーが発生しました。
java.lang.SecurityException: com.embarcadero.AndSetting was not granted  this permission: android.permission.WRITE_SETTINGS.

生成されたフォルダ内のAndroidManifest.xmlを見ると
 <uses-permission android:name="android.permission.WRITE_SETTINGS" />
の記述があります。


設定値に問題があるのかと思い、参照した値を設定してみても同様の結果でした。
あと、気になったのでアプリの設定からストレージなど全ての権限をつけてみましたがダメでした。


Android側で何か事前にやっておく必要があるのでしょうか?
まだまだAndroid勉強中(Delphiもですが)
よろしくお願いいたします。

編集 削除
HFUKUSHI  2020-02-27 04:12:49  No: 148596  IP: 192.*.*.*

Androidは全く詳しくないのですが、実行時にTPermissionsServiceで権限を取得する必要があった気がします。
詳しくは第36回エンバカデロデベロッパーキャンプの細川さんのセッション「iOS 12、Android 9時代の今からでも始められるモバイル開発入門」の資料を確認してみてください(要登録)。

編集 削除
KONNOYA  2020-02-27 06:12:01  No: 148597  IP: 192.*.*.*

私も余り詳しくないのですが、
[Delphiメニュー] -> [プロジェクト] → [オプション] → [使用する権限] → [WakeLock]をチェック
ではどうでしょう?

編集 削除
デンカ  2020-02-27 08:26:52  No: 148598  IP: 192.*.*.*

HFUKUSHIさん、ありがとうございます。

教えていただいたデベロッパーキャンプからpdfをダウンロードしてきました。

例と同じように記述し、権限を'android.permission.WRITE_SETTINGS'を指定しましたが、
結果のPermissionRequestResultで、ソースに書かれている「権限がないため終了します」になってしました。
ちなみに、例にように'android.permission.READ_EXTERNAL_STORAGE'を指定するとエラーは出ませんでした。

ここで指定できるのは、Androidの設定で指定できるカメラやストレージのみなのかな?って思いましたが、
スリープだってAndroidの設定で指定できるしなあ???
そもそも、TPermissionsServiceとオプションの[使用する権限]との関係は何なのでしょう??
あと、JManifest_permissionのpropertyにもWRITE_SETTINGSがありますねえ。



KONNOYAさん、ありがとうございます。

 [WakeLock]をチェックして
  <uses-permission android:name="android.permission.WAKE_LOCK" />が追加されましたが、
結果は、同じエラーになってしまいました。


疑問だらけですみません。

編集 削除
HFUKUSHI  2020-02-27 09:18:46  No: 148599  IP: 192.*.*.*

> そもそも、TPermissionsServiceとオプションの[使用する権限]との関係は何なのでしょう??
細川さんの資料にあるとおり、以前は静的に指定(→プロジェクトオプション)すればよかったものが、Android側の仕様の変更で実行時にユーザに確認(→TPermissionsService)しなければならなくなった、ということのようです。

編集 削除
KONNOYA  2020-02-27 23:00:04  No: 148600  IP: 192.*.*.*

参考までに。
http://docwiki.embarcadero.com/RADStudio/Rio/ja/%EF%BC%BB%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E6%A8%A9%E9%99%90%EF%BC%BD

・基本の使用権原
・注意の必要な権限
・署名関連のユーザー権限

大まかに分けて3カテゴリの権限が有り、アプリが権限を取得するにはそれぞれ手順を踏む必要がある様です。

編集 削除
デンカ  2020-02-28 01:39:25  No: 148601  IP: 192.*.*.*

色々、ありがとうございます。

>>Android側の仕様の変更で実行時にユーザに確認(→TPermissionsService)しなければならなくなった、ということのようです。
  現在のAndroidでは、オプションの指定は無意味で、TPermissionsServiceで権限を付加しないとダメってことになりますね。


>>大まかに分けて3カテゴリの権限が有り、アプリが権限を取得するにはそれぞれ手順を踏む必要がある様です。
「WRITE_SETTINGS」は、署名関連のユーザー権限で、マッチング認証が必要となります。 と書かれている。

「マッチング認証」って???

この辺を勉強しないとダメですね。。。
https://developer.android.com/training/permissions/requesting?hl=ja
「API レベルでパーミッションを宣言する」

しかし、難しい

編集 削除
デンカ  2020-02-28 02:26:31  No: 148602  IP: 192.*.*.*

-----------------------------------------------------------------------------
API レベルでパーミッションを宣言する
実行時パーミッションをサポートするデバイス、つまり Android 6.0(API レベル 23)以降を実行しているデバイスでのみパーミッションを宣言するには、
uses-permission タグではなく uses- permission-sdk-23 タグを追加します。
このいずれかのタグを使用すると、maxSdkVersion 属性を設定して、新しいバージョンが実行されているデバイスでは特定のパーミッションが不要であることを指定できます。
-----------------------------------------------------------------------------

これは何を意味しているのでしょう
Delphiで対応可能でしたら対応方法を教えて頂けないでしょうか。

編集 削除