私は 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"/>
それを念頭に置いて、ウェイクロックの有無にかかわらず、これらのことも試しました。
ロック状態での設定変更はできますか?
それが起こるために私は何が欠けていますか?私はそれがあまりにも単純なもので、私が見過ごしているに違いない。
ありがとう、ケリー