20

Tôi đang đính kèm các tệp âm thanh vào thư mục nội dung để phát âm thanh trong thông báo nhưng tôi không thể phát âm thanh từ thư mục nội dung.Đặt Âm thanh thông báo từ thư mục Nội dung

Tôi có trang cài đặt mà từ đó người dùng có thể đặt âm thanh cho thông báo và người dùng cũng có thể phát âm thanh. Phần này đã hoàn thành. Tôi có thể phát âm thanh từ thư mục nội dung bằng Trình phát phương tiện. Tôi có thể sử dụng cùng một logic tại thời điểm tạo Thông báo nhưng vấn đề có thể xảy ra khi người dùng nhấp vào Thông báo vì trình phát phương tiện vẫn phát âm thanh.

tôi đã cố gắng

notification.sound = Uri.parse("file:///android_asset/Sound/Long/AlarmClock.mp3"); 

cũng đã cố gắng như thế này

notification.sound = Uri.parse("android_asset/Sound/Long/AlarmClock.mp3"); 

nhưng vấn đề của tôi vẫn chưa được giải quyết.

Có cách nào khác để đặt âm thanh trong thông báo từ thư mục nội dung không?

Logcat

01-10 09:57:01.509: ERROR/PlayerDriver(31): Command PLAYER_SET_DATA_SOURCE completed with an error or info PVMFErrNotSupported 
01-10 09:57:01.509: ERROR/MediaPlayer(52): error (1, -4) 
01-10 09:57:01.519: WARN/NotificationService(52): error loading sound for android_asset/Sound/Long/audio.mp3 
01-10 09:57:01.519: WARN/NotificationService(52): java.io.IOException: Prepare failed.: status=0x1 
01-10 09:57:01.519: WARN/NotificationService(52):  at android.media.MediaPlayer.prepare(Native Method) 
01-10 09:57:01.519: WARN/NotificationService(52):  at android.media.AsyncPlayer.startSound(AsyncPlayer.java:64) 
01-10 09:57:01.519: WARN/NotificationService(52):  at android.media.AsyncPlayer.access$200(AsyncPlayer.java:33) 
01-10 09:57:01.519: WARN/NotificationService(52):  at android.media.AsyncPlayer$Thread.run(AsyncPlayer.java:99) 
01-10 09:57:01.519: WARN/PlayerDriver(31): PVMFInfoErrorHandlingComplete 

hoặc bất kỳ ý tưởng nào khác không? Xin vui lòng cho tôi gợi ý.

+0

chính xác những gì đang xảy ra? –

+0

Tôi đã cập nhật ngoại lệ – Dharmendra

Trả lời

30

đặt tệp mp3 ur ở res->raw folder, cố gắng tìm nạp tệp âm thanh từ raw folder.

Uri path = Uri.parse("android.resource://com.androidbook.samplevideo/" + R.raw.myvideo); 

HOẶC

Uri path = Uri.parse("android.resource://com.androidbook.samplevideo/raw/myvideo"); 
+1

kiểm tra liên kết này mà tôi đã tìm thấy thú vị [link] (http://www.anddev.org/multimedia-problems-f28/how-to-solve-pvmferrnotsupported-error-while-playing-sound-t17270.html) – rajpara

+0

Vâng, đây là ý tưởng tuyệt vời để tạo nội dung Nhà cung cấp để truy cập các tệp nội bộ – Dharmendra

+3

Lưu ý, tôi thấy rằng âm thanh phải là một .mp3 để hoạt động, không phải .ogg (giống như phần còn lại của âm thanh của chúng ta), và như rajpara đã trình bày ở trên, dường như không cần thêm phần mở rộng Vì vậy, tập tin âm thanh của tôi, push.mp3 trong thư mục myproject/res/raw, đã làm việc với: android.resource: //com.mycompany.myapp/raw/push – leontx

0

Đường dẫn chính xác để tải nội dung nào đó từ thư mục nội dung của bạn là file:///android_assets/relative_path_to_your_file. Lưu ý ba dấu gạch chéo tại đây. Mặc dù tôi đã không cố gắng để thiết lập một âm thanh thông báo theo cách này, tôi đã sử dụng điều này với một WebView với thành công một số lần, và sẽ mong đợi nó để làm việc theo cùng một cách.

+0

Ok, hãy để tôi thử với ba dấu gạch chéo – Dharmendra

+0

Không hoạt động sau khi đặt 3 dấu gạch chéo: ( – Dharmendra

+0

Bạn có gặp lỗi giống như trong bài đăng gốc không? – Bendik

5

tài sản là nguồn tin cho rằng ứng dụng, tôi nghĩ rằng bạn sẽ không thể cài đặt chúng làm nhạc chuông, bạn sẽ cần một tập tin nào có thể truy cập bởi quá trình truyền thông để đặt nhạc chuông. Bạn sẽ phải sao chép tệp vào sdcard để đặt nó làm nhạc chuông.

+0

Vâng tôi nghĩ bạn đúng. để truy cập các tài nguyên cá nhân, tôi sẽ phải sử dụng nhà cung cấp nội dung. – Dharmendra

0

Tôi không thể truy cập trực tiếp tệp âm thanh của nội dung vào Thông báo. Vì vậy, tôi làm theo các bước này và vì vậy tôi có thể phát âm thanh trong Thông báo

  1. Tôi sao chép tệp đó vào thư mục dữ liệu.
  2. Vẫn không thể truy cập thư mục dữ liệu trong âm thanh Thông báo để tôi tạo một tùy chỉnh Content Provider để chia sẻ tệp âm thanh trong phần đọc thêm hiện có trong thư mục dữ liệu.
  3. Bây giờ tại thời điểm tạo thông báo, tôi đã đặt Uri của tệp thành âm thanh Thông báo.

Hiện đang sử dụng các bước này tôi có thể đặt âm thanh tùy chỉnh thành Thông báo.

0

Trình cung cấp nội dung là cách để thực hiện. Tôi không nghĩ rằng cần sao chép tệp vào thư mục dữ liệu như @Dharmendra đề xuất. Bạn có thể truy cập trực tiếp vào thư mục nội dung mặc dù ContentProvider

public AssetFileDescriptor openAssetFile(Uri uri, String mode) 
     throws FileNotFoundException { 
    String filePart = Sound.getSoundFileName(uri); 

    try { 
     return getContext().getResources().getAssets().openFd(filePart + ".ogg"); 
    }catch(IOException e) { 
     Log.d(TAG, "fail " + e.getMessage()); 

    } 
    return null; 
} 
+0

và làm cách nào tôi có thể nhận được Nhạc chuông từ AssetFileDescriptor này? – wutzebaer

+0

@wutzebaer Bạn có thể cung cấp cho NotificationCompat.Builder một URI của âm thanh để phát thông báo. openAssetFile trong nhà cung cấp nội dung của bạn được cung cấp URI này và trả lại AssetFileDescriptor cho thông báo để phát http://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html – Chiatar

6

Điều này làm việc hoàn hảo cho tôi. Tôi tìm thấy nó trên một bài đăng khác.

notification.sound = Uri.parse("android.resource://my.package.name/raw/notification"); 
+0

Uri của bạn cho biết rằng bạn đang truy cập thư mục tài nguyên thay vì từ nội dung. Bạn đang tham chiếu một tệp từ thư mục hàng bên trong tài nguyên của bạn. – Dharmendra

+0

Thực tế điều này là tốt khi chúng tôi đặt một tệp âm thanh vào thư mục hàng và tham khảo tệp đó. – Dharmendra

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