2010-12-14 49 views
130

Tôi đã tự hỏi làm cách nào để phát âm thanh thông báo mà không phát âm thanh qua luồng phương tiện. Ngay bây giờ tôi có thể làm điều này thông qua các phương tiện truyền thông, tuy nhiên tôi không muốn nó chơi như một tập tin phương tiện truyền thông, tôi muốn nó chơi như một thông báo hoặc cảnh báo hoặc nhạc chuông. heres một ví dụ về những gì mã của tôi trông giống như ngay bây giờ:Cách phát âm thanh thông báo android

MediaPlayer mp = new MediaPlayer(); 
mp.reset(); 
mp.setDataSource(notificationsPath+ (String) apptSounds.getSelectedItem()); 
mp.prepare(); 
mp.start(); 

Trả lời

337

Nếu ai vẫn đang tìm kiếm một giải pháp cho điều này, tôi tìm thấy một câu trả lời tại How to play ringtone/alarm sound in Android

try { 
    Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
    Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification); 
    r.play(); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

Bạn có thể thay đổi TYPE_NOTIFICATION để TYPE_ALARM, nhưng bạn sẽ muốn theo dõi Ringtone r của bạn để ngăn chặn chơi nó ... nói, khi người dùng nhấp vào một nút hoặc một cái gì đó.

+1

Điện thoại Motorola chẳng hạn mở rộng hoạt động ưu tiên và cho phép người dùng xác định âm thanh thông báo cho sms và các danh mục khác. Phương pháp trên sẽ không hoạt động với loại điện thoại này. Bạn có bất kỳ ý tưởng làm thế nào để giải quyết vấn đề này? – David

+2

Tôi gặp lỗi với điều này: 'MediaPlayer - Nên có bộ điều khiển phụ đề đã được đặt'. Nó có nghĩa là gì? – Deqing

+0

Sử dụng giải pháp này, sau 28/29 lần, âm thanh sẽ ngừng phát. Có ai biết tại sao không? –

1

Bạn có thể sử dụng NotificationNotificationManager để hiển thị các thông báo mà bạn muốn. Sau đó, bạn có thể tùy chỉnh âm thanh bạn muốn phát bằng thông báo của mình.

+4

Tôi không muốn hiển thị thông báo, tôi chỉ muốn phát âm thanh. – ninjasense

0

Tôi nghĩ rằng khái niệm "âm thanh thông báo" là một vài sai lầm trong giao diện người dùng Android.

Hành vi được mong đợi của Android là sử dụng Thông báo chuẩn để cảnh báo người dùng. Nếu bạn phát âm thanh thông báo mà không có biểu tượng thanh trạng thái, bạn sẽ khiến người dùng bối rối ("âm thanh đó là gì? Không có biểu tượng nào ở đây, có thể tôi gặp vấn đề về thính giác?").

Làm thế nào để thiết lập âm thanh trên một thông báo được, ví dụ, ở đây: Setting sound for notification

+0

Không thực sự, đây có thể là thông báo trong ứng dụng. Ví dụ: nếu bạn đang sử dụng ứng dụng trò chuyện và có hiệu ứng âm thanh nhỏ cho các tin nhắn đến và đi. Đó là những thông báo về bản chất và bạn muốn họ tắt khi điện thoại ở chế độ im lặng. – copolii

+0

Vâng, bạn nói đúng nhưng đó là một điều khác. Tôi đã nói (giả sử đây là chủ đề của câu hỏi) về "âm thanh thông báo hệ thống", đó là trên hệ thống Android GUI. Tất nhiên, khi bạn vào ứng dụng của riêng bạn, như tất cả tùy thuộc vào bạn. – think01

9

Nó được một lúc kể từ khi câu hỏi của bạn, nhưng ... Bạn đã cố gắng thiết lập các kiểu dòng Audio?

mp.setAudioStreamType(AudioManager.STREAM_NOTIFICATION); 

Nó phải được thực hiện trước khi chuẩn bị.

1

Tôi đã có khá nhiều câu hỏi tương tự. Sau khi một số nghiên cứu, tôi nghĩ rằng nếu bạn muốn chơi hệ thống mặc định "âm thanh thông báo", bạn khá nhiều phải hiển thị một thông báo và nói với nó để sử dụng âm thanh mặc định. Và có điều gì đó để nói cho đối số trong một số câu trả lời khác rằng nếu bạn đang chơi âm thanh thông báo, bạn cũng nên trình bày một số thông báo thông báo.

Tuy nhiên, một chút tinh chỉnh API thông báo và bạn có thể đến gần với những gì bạn muốn. Bạn có thể hiển thị thông báo trống và sau đó tự động xóa thông báo sau vài giây. Tôi nghĩ rằng điều này sẽ làm việc cho tôi; có lẽ nó sẽ làm việc cho bạn.

tôi đã tạo ra một tập hợp các phương pháp thuận tiện trong com.globalmentor.android.app.Notifications.java cho phép bạn tạo ra một âm thanh thông báo như thế này:

Notifications.notify(this); 

Các đèn LED cũng sẽ nhấp nháy và, nếu bạn được phép rung, rung sẽ xảy ra. Có, biểu tượng thông báo sẽ xuất hiện trên thanh thông báo nhưng sẽ biến mất sau vài giây.

Tại thời điểm này, bạn có thể nhận ra rằng, vì thông báo sẽ biến mất, bạn cũng có thể có thông báo mã cuộn trong thanh thông báo; bạn có thể làm như vậy:

Notifications.notify(this, 5000, "This text will go away after five seconds."); 

Có nhiều phương pháp tiện lợi khác trong lớp này. Bạn có thể tải toàn bộ thư viện từ số Subversion repository và xây dựng nó với Maven. Nó phụ thuộc vào globalmentor-core library, cũng có thể được xây dựng và cài đặt với Maven.

+0

Đó là cách phức tạp để chỉ đơn giản là chơi một âm thanh. Bạn chỉ có thể thực hiện việc này: http://stackoverflow.com/a/9622040/1417267 – slinden77

193

Giờ đây, bạn có thể thực hiện việc này bằng cách đưa âm thanh vào khi tạo thông báo thay vì gọi riêng âm thanh.

//Define Notification Manager 
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 

//Define sound URI 
Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(getApplicationContext()) 
     .setSmallIcon(icon) 
     .setContentTitle(title) 
     .setContentText(message) 
     .setSound(soundUri); //This sets the sound to play 

//Display notification 
notificationManager.notify(0, mBuilder.build()); 
+11

Điều này giải quyết một vấn đề khác - không phải "cách chơi âm thanh thông báo", nhưng "cách phát thông báo * và * hiển thị âm thanh". Câu trả lời được chấp nhận là hợp lý trong giải pháp của nó. –

+6

Có lẽ bạn cũng nên cài đặt tính năng này để phát qua STREAM_NOTIFICATION để nó được phát với tùy chọn âm lượng thông báo hiện tại của hệ điều hành: .setSound (soundUri, AudioManager.STREAM_NOTIFICATION) – mwk

+0

@Rob Riddle Nó hoạt động tốt. nhưng trong trường hợp có nhiều thông báo, ví dụ: 100 thông báo song song với âm thanh được trộn lẫn với âm thanh thông báo tiếp theo. một cách hợp lý nếu âm thanh đã được chơi nó sẽ chờ đợi để hoàn thành chơi trước đó. Bạn có thể vui lòng giúp đỡ trong trường hợp này? –

7

Hãy thử điều này:

public void ringtone(){ 
    try { 
     Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
     Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification); 
     r.play(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
44

Nếu bạn muốn có một âm thanh thông báo mặc định để được chơi, sau đó bạn có thể sử dụng setDefaults(int) phương pháp NotificationCompat.Builder lớp:

NotificationCompat.Builder mBuilder = 
     new NotificationCompat.Builder(this) 
       .setSmallIcon(R.drawable.ic_notification) 
       .setContentTitle(getString(R.string.app_name)) 
       .setContentText(someText) 
       .setDefaults(Notification.DEFAULT_SOUND) 
       .setAutoCancel(true); 

Tôi tin rằng đó là dễ dàng nhất cách để hoàn thành nhiệm vụ của bạn.

Các vấn đề liên quan