Android 6.0 以降での WRITE_SETTINGS について

38 views
Skip to first unread message

シューゴ

unread,
Feb 4, 2025, 7:41:34 AMFeb 4
to 日本Androidの会
こんにちは、しゅーご と申します。

> Google グループを使ったことが無いため見づらい書式にはなると思いますが、ご了承ください。
> また、この投稿は既に IssueTracker の方でも提起していますが、依然と解決していません。

私は、System ネームスペースの値を変更するアプリをいくつか作ってきました。

ADB のコマンドですと、次のようなシチュエーションです:
`settings put system [KEY] [VALUE]`

これを、Java のユーザーアプリから実行しようと思ったら、`WRITE_SETTINGS` の権限が必要となります。
targetSdk が 22 以下の場合、権限は自動で昇格されますが、23 以降の場合はユーザーによる許可が必要となります。
その権限が許可されているかどうかは canWrite() を使う訳なのですが、権限が許可されているのにも関わらず、IllegalArgumentException が発生し、"You cannot keep your settings in the secure settings." と返されます。

この場合の問題点としては、System ネームスペースの設定を変更するのに十分な権限が与えられているのにも関わらず、設定が変更できない所です。
"secure settings" とあるので、WRITE_SECURE_SETTINGS を昇格すれば出来ると思った方も居るかも知れませんが、それは無理です。
WRITE_SECURE_SETTINGS は、Global ネームスペース及び Secure ネームスペースのみを対象とし、System ネームスペースは対象でないためです。

ここに、アプリのサンプルコードがあります。
Android Developers のドキュメントを見る限りでもこれで問題は無いはずです。
しかし、先ほども述べた様に、設定の変更に必要な権限は昇格しているのにも関わらず、エラーでスローされ設定の変更が出来ません。

この問題は私だけでなく、MacroDroid 等のメジャーなアプリも同様の問題を抱えています。
何よりも、Android 14 (SDK 34) 以降は、ADB を介さないと、targetSdk が 22 以下のアプリはインストールできなくなりました。
その為、Play ストアになんか当然公開できるわけも無いし、何よりインストールしたいユーザーの手を煩わせてしまいます。

サンプルアプリのコードを参照して解決策がある場合はご教授願います。

の問題点としては、umentExceptionIllegalArgumentExceptionIIllegalArgumentExceptionIllegalArgumentExceptionIllegalArgumentExcep
Reply all
Reply to author
Forward
0 new messages