为什么通知声音会使 phone 振动?
Why do notification SOUNDS make the phone VIBRATE?
如果我创建一个没有声音的常规通知,它可以正常工作。但如果我添加声音,它就会振动。这不合逻辑,所以我不明白。
这是一个正常工作的代码示例(不振动)
Notification.Builder builder = new Notification.Builder(this);
builder.setSmallIcon(R.drawable.ic_launcher)
.setContentIntent(PendingIntent.getActivity(this, 0, new Intent(), 0))
.setOngoing(false);
builder.setCategory(Notification.CATEGORY_SERVICE);
builder.setVisibility(Notification.VISIBILITY_SECRET);
builder.setPriority(Notification.PRIORITY_MAX);
builder.setLights(0xFF00FF00, 1000, 0);
Uri theUri = Uri.parse(uriString);
//builder.setSound(theUri);
builder.setContentText("Android sucks");
builder.setAutoCancel(false);
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
manager.notify(FOREGROUND_ID, builder.build());
这是使 phone 振动的代码。请注意,我的通知中未设置振动:
Notification.Builder builder = new Notification.Builder(this);
builder.setSmallIcon(R.drawable.ic_launcher)
.setContentIntent(PendingIntent.getActivity(this, 0, new Intent(), 0))
.setOngoing(false);
builder.setCategory(Notification.CATEGORY_SERVICE);
builder.setVisibility(Notification.VISIBILITY_SECRET);
builder.setPriority(Notification.PRIORITY_MAX);
builder.setLights(0xFF00FF00, 1000, 0);
Uri theUri = Uri.parse(uriString);
builder.setSound(theUri);
builder.setContentText("Go buy an iPhone");
builder.setAutoCancel(false);
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
manager.notify(FOREGROUND_ID, builder.build());
说我不合理,但当我想要声音时,我会设置声音,当我想要振动时,我会设置振动。如果我想要两者,我会同时设置两者。那为什么我设置声音的时候会自动震动呢?
这似乎可以解决问题:
long[] nullify = {0,0,0};
builder.setVibrate(nullify);
虽然它会导致一些额外的令人沮丧的异常。有七个音频流。他们是:
STREAM_RING;
STREAM_NOTIFICATION;
STREAM_ALARM;
STREAM_MUSIC;
STREAM_DTMF;
STREAM_SYSTEM;
STREAM_VOICE_CALL;
现在,如果我必须选择我认为通知声音将使用哪个流,您认为我会猜到哪个流?你是对的,我希望它使用 STREAM_NOTIFICATION。它使用什么流? STREAM_SYSTEM。因此,如果我希望能够控制通知的音量,我必须将音量设置为 STREAM_SYSTEM。但这当然会产生不必要的副作用,例如,现在我更改了该设置,当我在 Facebook 应用程序中单击 "like" 时,您可以听到声音。
Android 真是一团糟。
如果我创建一个没有声音的常规通知,它可以正常工作。但如果我添加声音,它就会振动。这不合逻辑,所以我不明白。
这是一个正常工作的代码示例(不振动)
Notification.Builder builder = new Notification.Builder(this);
builder.setSmallIcon(R.drawable.ic_launcher)
.setContentIntent(PendingIntent.getActivity(this, 0, new Intent(), 0))
.setOngoing(false);
builder.setCategory(Notification.CATEGORY_SERVICE);
builder.setVisibility(Notification.VISIBILITY_SECRET);
builder.setPriority(Notification.PRIORITY_MAX);
builder.setLights(0xFF00FF00, 1000, 0);
Uri theUri = Uri.parse(uriString);
//builder.setSound(theUri);
builder.setContentText("Android sucks");
builder.setAutoCancel(false);
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
manager.notify(FOREGROUND_ID, builder.build());
这是使 phone 振动的代码。请注意,我的通知中未设置振动:
Notification.Builder builder = new Notification.Builder(this);
builder.setSmallIcon(R.drawable.ic_launcher)
.setContentIntent(PendingIntent.getActivity(this, 0, new Intent(), 0))
.setOngoing(false);
builder.setCategory(Notification.CATEGORY_SERVICE);
builder.setVisibility(Notification.VISIBILITY_SECRET);
builder.setPriority(Notification.PRIORITY_MAX);
builder.setLights(0xFF00FF00, 1000, 0);
Uri theUri = Uri.parse(uriString);
builder.setSound(theUri);
builder.setContentText("Go buy an iPhone");
builder.setAutoCancel(false);
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
manager.notify(FOREGROUND_ID, builder.build());
说我不合理,但当我想要声音时,我会设置声音,当我想要振动时,我会设置振动。如果我想要两者,我会同时设置两者。那为什么我设置声音的时候会自动震动呢?
这似乎可以解决问题:
long[] nullify = {0,0,0};
builder.setVibrate(nullify);
虽然它会导致一些额外的令人沮丧的异常。有七个音频流。他们是:
STREAM_RING;
STREAM_NOTIFICATION;
STREAM_ALARM;
STREAM_MUSIC;
STREAM_DTMF;
STREAM_SYSTEM;
STREAM_VOICE_CALL;
现在,如果我必须选择我认为通知声音将使用哪个流,您认为我会猜到哪个流?你是对的,我希望它使用 STREAM_NOTIFICATION。它使用什么流? STREAM_SYSTEM。因此,如果我希望能够控制通知的音量,我必须将音量设置为 STREAM_SYSTEM。但这当然会产生不必要的副作用,例如,现在我更改了该设置,当我在 Facebook 应用程序中单击 "like" 时,您可以听到声音。
Android 真是一团糟。