我在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"/>
现在考虑到这一点,我也尝试过使用和不使用唤醒锁来做这些事情。
处于锁定状态时可以更改设置吗?
我发现了什么?我敢打赌,这只是一件非常简单的事情。
谢谢, 凯利
答案 0 :(得分:0)
目前这些是我正在使用的手机状态。我认为使它工作的是修改手机状态。希望这可以帮助其他人。
顺便说一句。谷歌文档中的一些描述真的很痛苦。有没有人知道一个更好的地方(我知道这是一个有趣的问题,因为他们是谷歌的文档)描述了手机的用户权限。
另一件事。经过一些阅读后,已经注意到修改手机状态已经改变了一些未来的行为。基本上一些隐藏/未记录的类/接口可以像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"/>