Как открыть данные приложений Android для других приложений? - PullRequest
0 голосов
/ 30 января 2019

Я использую менеджер загрузок, чтобы загрузить файл 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 рингтон не настраивается.Эта строка возвращает null Uri newUri = context.getContentResolver().insert(uri, content);

Я предполагаю, что это потому, что данные приложения недоступны публично и скрыты.Мне нужно хранить данные в хранилище приложений, потому что я хочу, чтобы они были удалены при удалении приложения.Есть ли способ представить данные приложения другому приложению?Я пытался использовать контент-провайдера, но не понял, как это сделать.Пожалуйста, помогите.

...