在处于锁定状态Android时设置振动

时间:2011-06-28 00:37:08

标签: android sleep android-2.2-froyo vibrate android-audiomanager

我在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. 我发现了什么?我敢打赌,这只是一件非常简单的事情。

  3. 谢谢, 凯利

1 个答案:

答案 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"/>