type - android:resource xml




從資產文件夾設置通知聲音 (4)

我將通知中播放聲音的資源文件夾中的聲音文件附加到資源文件夾中,但無法播放聲音。

我有設置頁面,從哪個用戶可以設置聲音的通知,也可以播放聲音。 這部分已經完成。 我可以使用Media Player從資源文件夾播放聲音。 我可以在通知創建時使用相同的邏輯,但是當用戶點擊通知時,可能會發生問題,因為媒體播放器仍在播放聲音。

我試過了

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

也試過這樣的

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

但我的問題仍然沒有解決。

有沒有其他的方式來設置資產目錄的通知聲音?

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

或任何其他的想法? 請給我提示。


從資產文件夾加載東西的正確路徑是file:///android_assets/relative_path_to_your_file 。 注意這裡的三個斜線 。 雖然我沒有試圖用這種方式來設置通知聲音,但是我已經使用了一個WebView成功多次,並期望它以同樣的方式工作。


資產是該應用程序的私人資源,我認為你不能將它們設置為鈴聲,您將需要一個公共文件,媒體進程可訪問該文件來設置鈴聲。 你將不得不復製文件到SD卡設置為鈴聲。


ContentProvider是要走的路。 我不認為有必要像@Dharmendra建議的那樣將文件複製到數據目錄。 您可以通過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;
}

這對我來說是完美的。 我在另一個帖子找到它。

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




android-assets