【发布时间】:2017-02-01 08:36:49
【问题描述】:
我正在构建一个 ping 功能,用于通过蓝牙查找丢失的手机。我需要电话响起,即使它设置为静音/静音,就像警报通常的工作方式一样。我想我可以把我的notification 的streamtype 放到AudioManager.STREAM_ALARM 但它不起作用。只有在手机声音打开时才会响起。我是这样设置的:
NotificationCompat.Builder builder = new NotificationCompat.Builder(getApplicationContext());
builder.setSmallIcon(R.drawable.ic_spenwallet)
.setContentTitle("Ping")
.setContentText("Device is trying to find your phone.")
.setAutoCancel(false)
.setSound(sound, STREAM_ALARM)
.setVibrate(vibratePattern)
.addAction(cancelAction);
如果我尝试:
Notification notification = builder.build();
notification.audioStreamType = AudioManager.STREAM_ALARM;
我收到来自 Android Studio 的警告,即不推荐使用 audioStreamType。是这样吗?即使打开静音模式,还有其他方法可以使notificaiton 发出声音吗? (最好也振动)
我为此目的创建了一个专用的媒体播放器,但我认为不需要这样做。无论如何,我是这样做的:
MediaPlayer mediaPlayer = new MediaPlayer();
final String packageName = getApplicationContext().getPackageName();
Uri sound = Uri.parse("android.resource://" + packageName + "/" + R.raw.ping_sound);
try {
mediaPlayer.setDataSource(this, sound);
} catch (IOException e) {
e.printStackTrace();
}
final AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
if (audioManager.getStreamVolume(AudioManager.STREAM_ALARM) != 0) {
mediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM);
mediaPlayer.setLooping(false);
try {
mediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
}
mediaPlayer.start();
}
【问题讨论】:
标签: android audio android-notifications android-permissions