【发布时间】:2017-08-03 19:39:29
【问题描述】:
我正在尝试通过我的资产文件夹中的内容提供商设置 android 默认铃声或通知铃声。 令人惊讶的是,它是这样工作的,但是这是一种合法的方式吗?
Uri audiouri = Uri.parse("content://"+BuildConfig.APPLICATION_ID+"/"+soundname+".mp3");
RingtoneManager.setActualDefaultRingtoneUri(a, TYPE_NOTIFICATION, audiouri );
我也试过这个:
Uri audiouri = Uri.parse("content://"+BuildConfig.APPLICATION_ID+"/"+soundname+".mp3");
ContentValues contentValues = new ContentValues();
contentValues.put(MediaStore.MediaColumns.TITLE, soundname);
Uri ringtoneuri = a.getContentResolver().insert(audiouri, contentValues);
RingtoneManager.setActualDefaultRingtoneUri(a, TYPE_NOTIFICATION, ringtoneuri);
导致空声音(未设置声音)
我尝试的第三个选项是:
Uri audiouri = MediaStore.Audio.Media.getContentUriForPath("content://"+BuildConfig.APPLICATION_ID+"/"+soundname+".mp3");
ContentValues contentValues = new ContentValues();
contentValues.put(MediaStore.MediaColumns.DATA, "content://"+BuildConfig.APPLICATION_ID+"/"+soundname+".mp3");
contentValues.put(MediaStore.MediaColumns.TITLE, soundname);
Uri ringtoneuri = a.getContentResolver().insert(audiouri, contentValues);
RingtoneManager.setActualDefaultRingtoneUri(a, TYPE_NOTIFICATION, ringtoneuri);
现在声音名称显示正确,但实际上没有播放声音。 我在 logcat 上收到错误:
java.io.FileNotFoundException: 无法访问 /content:/com.mydomain.myapp/test.mp3
所以它似乎从不支持内容提供程序路径但仅支持真实路径的 MediaColumns.DATA 中获取值。对吧?
最后一个问题:如何在 android 设置中设置音调和名称?最好不要将文件复制到外部存储。
【问题讨论】:
标签: android notifications ringtone