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

目前这些是我用来工作的电话状态。我认为使它起作用的是修改手机状态。希望这可以帮助其他人。

顺便提一句。谷歌文档中对此的一些描述真的很痛苦。有谁知道更好的地方(我知道这是一个有趣的问题,因为他们是谷歌的文档)描述了手机的用户权限。

另一件事。经过一番阅读,已经注意到修改手机状态已经随着未来的行为发生了一些变化。基本上一些隐藏/未记录的类/接口可以像在 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 回答