1

私は Android の研究で興味深い部分にぶつかりました。私が行っているように、時間指定された PendingIntent を作成してオフにしました。それが消える前に、私は電話をロックします。それが消えるとき。私はそれが実行されているのを見て、私の電話の振動設定を変更しようとします. 残念ながら、それは設定を適用しません。

コード:

PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "VibrateTag");
wakeLock.acquire();

AudioManager audio = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);

int ringerMode = audio.getRingerMode();
if(ringerMode != AudioManager.RINGER_MODE_NORMAL && item.getVibrate() && item.getVolume() != 0)
{
    audio.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
}

final String INFO = "INFO";

int vibrateSetting = AudioManager.VIBRATE_SETTING_OFF;
if (item.getVolume() != 0)
{
    if (item.getVibrate()) vibrateSetting = AudioManager.VIBRATE_SETTING_ON;
}
else
{
    if (item.getVibrate()) vibrateSetting = AudioManager.VIBRATE_SETTING_ONLY_SILENT;
}

Log.e(INFO,"AReceiver attempting to update vibrate to " + vibrateSetting);

audio.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, vibrateSetting);

Log.e(INFO,"AReceiver updated vibrate to " + audio.getVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER));

wakeLock.release();

ロック時のログ:

06-27 18:31:00.184: ERROR/INFO(3031): AReceiver attempting to update vibrate to 1
06-27 18:31:00.184: ERROR/INFO(3031): AReceiver updated vibrate to 0

ロックを解除して使用しているときに言ったように、そのログは変更が成功したことを示し、値が 1 に変更されます。

電話のロックを解除してこれを行うと、機能します。ブロードキャストは機能します (BootUp で開始)。

以下で使用する権限をロックダウンしようとしました:

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

<uses-permission android:name="android.permission.VIBRATE"/>

<uses-permission android:name="android.permission.WAKE_LOCK"/>

<uses-permission android:name="android.permission.WRITE_SETTINGS"/>

それを念頭に置いて、ウェイクロックの有無にかかわらず、これらのことも試しました。

  1. ロック状態での設定変更はできますか?

  2. それが起こるために私は何が欠けていますか?私はそれがあまりにも単純なもので、私が見過ごしているに違いない。

ありがとう、ケリー

4

1 に答える 1

0

現在、これらは私がこれを機能させるために使用している電話の状態です。それを機能させるのは、電話の状態の変更だと思います。うまくいけば、これは他の誰かを助けることができます.

ところで。これについては、Googleドキュメントの説明の一部が本当に面倒です。電話のユーザー権限を説明するより良い場所を知っている人はいますか (Google のドキュメントなので、これは面白い質問だと思います)。

もう1つ。いくつか読んだ後、電話の変更状態が将来の動作で一部変更されていることがわかりました。基本的に、いくつかの非表示/ドキュメント化されていないクラス/インターフェイスは、2.2 のように使用できます。

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>

<uses-permission android:name="android.permission.MODIFY_PHONE_STATE"/>

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

<uses-permission android:name="android.permission.VIBRATE"/>

<uses-permission android:name="android.permission.WAKE_LOCK"/>

<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
于 2011-06-30T03:59:03.503 に答える