Android2.3に撃沈された件

Xperia Arc発売と共に、BetterSleepが動作しないという報告をいただくようになりました。
Android2.3端末の実機は所有していないし、アプリの性質上エミュレータで確認することも難しいので困りもの。
しょうがないのでテスト用のアプリを作成し、怪しそうな機能を切り出してエミュレータでテストしてみました。

結果、Android2.3ではどうやらPowerManager#userActivity()が機能していない模様です。
Σ(゚Д゚;

これは、スクリーンオフまでのタイマーをリセットし、なおかつ端末を活性化するものです。(つまり、これが使えないとどうしようもありません)
このメソッドを呼び出す度にシステムのログに
WARN/PowerManagerService(68): Caller does not have DEVICE_POWER permission….
と、はき出されています。
つまり、2.2→2.3でPowerManager#userActivity()には、DEVICE_POWERの許可が必要になった模様です。

では、アプリに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)

なんてこったいorz
android.permission.DEVICE_POWERはprotectionLevelがsignatureなので、どうも普通のアプリには許可されない模様
#あ、テスト用のapkには署名してます。
手詰まり何じゃないかえ?

Tags: , ,

関連トピックス

2 Responses


  1. nanashi 

    とても良いです。全ての使用シーンに作用するので、有ると無いとではandroidの使用感が雲泥の差です。復活をぜひ望みます。

    2.3になってからOSの仕様変更で対処できないとの件、下記ではできないでしょうか。当方、androidのプログラムの具体的な事は全く分からないので、表現等がおかしいでしょうが、案として。

    OSは、アプリからの、ディスプレイタイムアウトのリセットをさせない。だが、タイムアウトの時間変更は、可能。

    よって、
    常にディスプレイがオンになってからの点灯時間をカウントし続け、振動等の条件が入ったら、タイムアウト時間を変動させる。(現状カウント時間+15秒等)

    (androidマーケットにある「バックライトスイッチ」はアプリで消灯を制御している事より、不可能ではないはずであり、「tasker」で試して推測しました。)


  2. lupin133 

    画面がオンしてからの時間をカウントしておき、振動でディスプレイオフ時間の変数を変化させる方法ではダメですか。

Leave a Reply