如何在奥利奥 8.0 中以编程方式设置铃声



我可以在 4.0 到 6.0(棉花糖(之间以编程方式设置铃声,但不能在 6.0(棉花糖(之后设置。

您能否告诉我如何解决此问题,以便我也可以将铃声设置为 Android Oreo 8.0 和 8.1 版本设备?

public void setRingtone(String filepath) {
File ringtoneFile = new File(filepath);
ContentValues content = new ContentValues();
content.put(MediaStore.MediaColumns.DATA, ringtoneFile.getAbsolutePath());
content.put(MediaStore.MediaColumns.TITLE, "Ring");
content.put(MediaStore.MediaColumns.SIZE, ringtoneFile.length());
content.put(MediaStore.MediaColumns.MIME_TYPE, "audio/*");
//  content.put(MediaStore.Audio.Media.ARTIST, "Madonna");
content.put(MediaStore.Audio.Media.IS_RINGTONE, true);
content.put(MediaStore.Audio.Media.IS_NOTIFICATION, false);
content.put(MediaStore.Audio.Media.IS_ALARM, false);
content.put(MediaStore.Audio.Media.IS_MUSIC, true);
Uri uri = MediaStore.Audio.Media.getContentUriForPath(ringtoneFile.getAbsolutePath());
getContentResolver().delete(uri, MediaStore.MediaColumns.DATA + "="" + ringtoneFile.getAbsolutePath() + """, null);
Uri newUri = getContentResolver().insert(uri, content);
System.out.println("uri==" + uri);
Log.i("TAG", "the ringtone uri is :" + newUri);
RingtoneManager.setActualDefaultRingtoneUri(getApplicationContext(), RingtoneManager.TYPE_RINGTONE, newUri);
Toast.makeText(this, "Ringtone set success!", Toast.LENGTH_SHORT).show();
}

谢谢。

在项目上添加 URI 权限

安卓清单.xml

<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths" />
</provider>

res中创建xml文件夹,在res/XML中创建provider_path.xml,如下所示

provider_paths.xml

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_files" path="."/>
</paths>

希望对你有帮助

最新更新