从应用程序专用内部存储设置自定义铃声

时间:2019-01-10 05:30:58

标签: android audio android-contentprovider ringtone ringtonemanager

我想从我的应用程序专用内部存储中设置自定义铃声,即

data/data/<package>/files/audio.mp3

出于安全原因,我不想在内部/外部存储中保存音频。我正在使用下面的代码

private void set() {
    String fPAth = "/data/data/" + mContext.getPackageName();
    File k = new File(fPAth, fileName + ".mp3"); // path is a file to /sdcard/media/ringtone

    ContentValues values = new ContentValues();
    values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath());
    values.put(MediaStore.MediaColumns.TITLE, "99999");
    values.put(MediaStore.MediaColumns.SIZE, k.length());
    values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
    values.put(MediaStore.Audio.Media.ARTIST, "Madonna");
    values.put(MediaStore.Audio.Media.IS_RINGTONE, true);
    values.put(MediaStore.Audio.Media.IS_NOTIFICATION, false);
    values.put(MediaStore.Audio.Media.IS_ALARM, false);
    values.put(MediaStore.Audio.Media.IS_MUSIC, false);


    Uri uri = MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath());//content://media/external/audio/media
    LogMgr.i("DownloadAsyncTask-->set-->uri-->" + uri);

    String filePathToDelete = MediaStore.MediaColumns.DATA + "=\"" + k.getAbsolutePath() + "\"";
    LogMgr.i("DownloadAsyncTask-->set-->filePathToDelete-->" + filePathToDelete);

    mContext.getContentResolver().delete(uri, filePathToDelete, null);

    Uri newUri = mContext.getApplicationContext().getContentResolver().insert(uri, values);
    LogMgr.i("DownloadAsyncTask-->set-->newUri-->" + newUri);

    RingtoneManager.setActualDefaultRingtoneUri(
            mContext,
            RingtoneManager.TYPE_RINGTONE,
            newUri
    );
}

上面的代码没有引发任何异常。但是,当我尝试播放使用以上代码设置的自定义铃声时,它将播放默认铃声,而不是我的自定义铃声。

所以请建议我如何从应用程序专用内部存储中设置自定义铃声。

数据/数据/我的包名称/文件/audio.mp3

0 个答案:

没有答案