如何将android应用程序数据公开给其他应用程序?

时间:2019-01-30 09:51:15

标签: android android-contentprovider android-storage

我正在使用下载管理器通过以下代码下载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);

我认为这是因为应用程序数据不可公开获取并被隐藏。我需要将数据存储在应用程序存储中,因为我希望在应用程序卸载时将其删除。是否可以将应用程序数据公开给其他应用程序?我尝试使用内容提供程序,但没有弄清楚该怎么做。请帮忙。

0 个答案:

没有答案