Android2.3のPowerManager#userActivityとDEVICE_POWERパーミッション

1,641 views
Skip to first unread message

Tad

unread,
Mar 29, 2011, 7:57:49 AM3/29/11
to 日本Androidの会
Tadと申します。

Xperia Arcが発売され、Android2.3のユーザが国内で増えたため不具合報告が上がってくるようになりました。

拙作のアプリでPowerManager#userActivity()を用いて、スリープタイマーをリセットしスリープを抑制していたのですが、
2.3ではこのAPIが機能しないようです。

エミュレータで実験用のアプリを走らせて確認したところ、PowerManager#userActivity()の呼び出しのタイミングで
WARN/PowerManagerService(68): Caller does not have DEVICE_POWER
permission....
がログに吐き出されます。

2.3になり、PowerManager#userActivity()にDEVICE_POWERのパーミッションが必要になったのだと考えまし
た。
そこで、AndroidManifest.xmlに
<uses-permission android:name="android.permission.DEVICE_POWER"></uses-
permission>
を追加したのですが、インストール時のログに
WARN/PackageManager(64): Not granting permission
android.permission.DEVICE_POWER to package net.vmid.androidtest
(protectionLevel=2 flags=0xbe44)
となってしまい、パーミッションが許可されません。

確認すると、android.permission.DEVICE_POWERのandroid:protectionLevelはsignature
となっています。
私の認識ではこれはシステム署名が必要で、実質通常のアプリからは扱えない権限だと思っていますが、正しいでしょうか?

ただ、マーケットにあるアプリでもsignatureOrSystemレベルの権限を要求しているものもあり、何らかの逃げ道があるのではないかと思っ
ているのですが、もしございましたらご教授いただければと思います。

以上、乱文ご容赦ください。

awwa

unread,
Mar 29, 2011, 9:46:42 PM3/29/11
to android-g...@googlegroups.com
あわと申します。

※私もArc特有で発生する不具合の報告を受けてそろそろ対応していこうというところです。
単純にスリープの抑制だけが目的であれば、PowerManager.WakeLockを使えば可能かと思いますが、
こちらは試されていますか?
の一番上に載っているサンプルですね。
もしかして、これもuserActivity()と同様のパーミッションが必要になってしまったりしているかもしれませんが、
実機を持っていないのでよくわかりません。
(このあたりの動きが変わっていないか知りたかったりもします)

ではでは。

2011年3月29日20:57 Tad <tad.de...@gmail.com>:

--
このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。




--
----


Tad

unread,
Mar 29, 2011, 11:51:37 PM3/29/11
to 日本Androidの会
Tadです。
あわ様、返信ありがとうございます。

残念ながら、アプリの性質上、WakeLockでは代替が利きそうにありません。

http://stackoverflow.com/questions/3635101/how-to-sign-android-app-with-system-signature
このあたりで書かれているようにカーネルソースから証明書を取り出して署名してしまえば良いのかなとも思うのですが、マーケット公開のアプリとしてはと
てもイレギュラーな気がしますし、そもそもこんなことで動くのかと……。

余談ですが、MODIFY_PHONE_STATEもsignatureOrSystemに変わっていました。
こういった仕様変更のインパクトは大きいですね。

On 3月30日, 午前10:46, awwa <awwa...@gmail.com> wrote:
> あわと申します。
>
> ※私もArc特有で発生する不具合の報告を受けてそろそろ対応していこうというところです。
> 単純にスリープの抑制だけが目的であれば、PowerManager.WakeLockを使えば可能かと思いますが、
> こちらは試されていますか?http://developer.android.com/reference/android/os/PowerManager.html
> の一番上に載っているサンプルですね。
> もしかして、これもuserActivity()と同様のパーミッションが必要になってしまったりしているかもしれませんが、
> 実機を持っていないのでよくわかりません。
> (このあたりの動きが変わっていないか知りたかったりもします)
>
> ではでは。
>
> 2011年3月29日20:57 Tad <tad.develo...@gmail.com>:
> awwa <awwa...@gmail.com>
> Twitterhttp://twitter.com/awwa500
> Bloghttp://awwa500.blogspot.com/
Reply all
Reply to author
Forward
0 new messages