我在收到通知时为特定功能定义了自定义振动。
但是,当手机屏幕关闭时,自定义振动会与默认通知振动一起播放。
我尝试将手机置于静音模式并以编程方式将其从静音模式中移除,并尝试使用部分唤醒锁,怀疑当CPU关闭时,也会抛出默认振动,但这两种方法都没有。似乎工作。
我还尝试将默认音频和振动静音并在接收到通知后完成我的任务时将其恢复,但这只会有助于屏蔽默认通知声音,而不是默认振动。
//Trying to mute the notification sound and vibration
audioManager.setStreamVolume(AudioManager.STREAM_NOTIFICATION, 0, AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
//Restoring the defaults
audioManager.setStreamVolume(AudioManager.STREAM_NOTIFICATION, defaultNotifVolume, AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
请让我知道如何以编程方式禁用/启用默认通知振动。
答案 0 :(得分:6)
尝试这样做
NotificationCompat.Builder notificationBuilder = (NotificationCompat.Builder) new NotificationCompat.Builder(this);
这将导致一种振动模式
使用通知生成器并删除设置的振动,这将禁用振动
这是我处理声音和振动的例子 例如:
Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = (NotificationCompat.Builder) new NotificationCompat.Builder(this)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentText(body)
.setContentTitle(title)
.setSound(soundUri)
.setLargeIcon(icon)
.setSound(soundUri)
.setLights(Color.parseColor("#ffb400"), 50, 10)
.setVibrate(new long[]{500, 500, 500, 500})
.setAutoCancel(true)
.setContentIntent(pendingIntent);
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0, notificationBuilder.build());
答案 1 :(得分:1)
这是不可能的(可能是root?)。
应用不会干扰其他应用,因此即使可能会违反Google Play规则。
答案 2 :(得分:1)
我认为您想要将振铃模式切换为振动或振铃或静音。
要收到通知,请在通知前将RINGER_MODE
设置为SILENT
,并在通知后将其设置回NORMAL
。
在Android中,您需要获得更改设备设置的权限才能切换任何设置参数。从添加开始,
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
,
到清单。
现在,使用AudioManager
来获得您想要达到的目标,
AudioManager aManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
aManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
您可以拥有,RINGER_MODE_VIBRATE
,RINGER_MODE_SILENT
或RINGER_MODE_NORMAL
。
另外,在清单中添加权限android.permission.VIBRATE
。
答案 3 :(得分:0)
你去吧
public void enableVibration(NotificationCompat.Builder builder, long[] customPattern){
builder.setVibrate(customPattern);
}
public void disableVibration(NotificationCompat.Builder builder){
builder.setVibrate(new long[]{0L});
}
希望这有帮助。