我正在使用下载管理器通过以下代码下载mp3文件。
equest.setAllowedNetworkTypes(
DownloadManager.Request.NETWORK_WIFI
| DownloadManager.Request.NETWORK_MOBILE)
.setAllowedOverRoaming(true)
.setTitle(filename)
.setVisibleInDownloadsUi(false)
.setNotificationVisibility(VISIBILITY_VISIBLE)
.setDescription("Setting as ringtone")
.setDestinationInExternalFilesDir(context,"tone", filename+".mp3");
,然后使用以下方法将mp3设置为铃声
public boolean setRingtone(Context context,Uri uriFile){
FileUtils fileUtils=new FileUtils(context);
try {
File ringtoneFile = new File(fileUtils.getPath(uriFile));
ContentValues content = new ContentValues();
content.put(MediaStore.MediaColumns.DATA,ringtoneFile.getAbsolutePath());
content.put(MediaStore.MediaColumns.TITLE, ringtoneFile.getName());
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.DURATION, fileUtils.fileDuration(ringtoneFile.getAbsolutePath()));
content.put(MediaStore.Audio.Media.IS_RINGTONE, true);
content.put(MediaStore.Audio.Media.IS_NOTIFICATION, true);
content.put(MediaStore.Audio.Media.IS_ALARM, true);
content.put(MediaStore.Audio.Media.IS_MUSIC, true);
//Insert it into the database
Log.i("TAG", "the absolute path of the file is :"+
ringtoneFile.getAbsolutePath());
Uri uri = MediaStore.Audio.Media.getContentUriForPath(
ringtoneFile.getAbsolutePath());
context.getContentResolver().delete(uri, MediaStore.MediaColumns.DATA + "=\"" + ringtoneFile.getAbsolutePath() + "\"",
null);
Uri newUri = context.getContentResolver().insert(uri, content);
System.out.println("uri=="+uri);
Log.i("TAG","the ringtone uri is :"+newUri);
RingtoneManager.setActualDefaultRingtoneUri(
context, RingtoneManager.TYPE_RINGTONE,
newUri);
return true;
}catch (Exception e){
e.printStackTrace();
return false;
}
}
这工作正常,但是当我替换.setDestinationInExternalFilesDir(context,"tone", filename+".mp3");
setDestinationInExternalFilesDir
铃声的。
该行返回空Uri newUri = context.getContentResolver().insert(uri, content);
我认为这是因为应用程序数据不可公开获取并被隐藏。我需要将数据存储在应用程序存储中,因为我希望在应用程序卸载时将其删除。是否可以将应用程序数据公开给其他应用程序?我尝试使用内容提供程序,但没有弄清楚该怎么做。请帮忙。