Set a sound file as ringtone and notification programmatically in Android

后端 未结 2 1523
暖寄归人
暖寄归人 2020-12-22 05:22

I have two buttons in my app. One for setting a sound file as ringtone and another as notification. I am able to set the sound file as a ringtone but when I try to set it as

相关标签:
2条回答
  • 2020-12-22 06:12

    Try this snippet and get red off Ringtone Setting Up

        public boolean setAsRingtone(String filePath) {
        // this function is use to On or Off Default Ringtone
        String[] files = { filePath };
            MediaScannerConnection.scanFile(context, files, null,
                    new MediaScannerConnection.OnScanCompletedListener() {
                        @Override
                        public void onScanCompleted(String path, Uri uri) {
                            System.out.println("Ringtone file " + path + " was scanned seccessfully: " + uri);
                            if(path!=null&&!path.isEmpty()){
                                try {
                                    RingtoneManager.setActualDefaultRingtoneUri(context, RingtoneManager.TYPE_RINGTONE, uri);
                                } catch (Throwable t) {
    
                                }
                            }else {
                                String defaultPath = Settings.System.DEFAULT_RINGTONE_URI.getPath();
                                File newSoundFile = new File(defaultPath);
                                Uri newUri = MediaStore.Audio.Media.getContentUriForPath(newSoundFile.getAbsolutePath());
                                try {
                                    RingtoneManager.setActualDefaultRingtoneUri(context, RingtoneManager.TYPE_RINGTONE, newUri);
                                } catch (Throwable t) {}
                            }
                        }
                    }
            );
    
            Toast.makeText(context, "Ringtone has been set successfully", Toast.LENGTH_SHORT).show();
    
          return true;
    }
    
    0 讨论(0)
  • 2020-12-22 06:14

    try this

    public void setNoti() {
            File file = new File(Environment.getExternalStorageDirectory(),
                    "/Your Directory");
            if (!file.exists()) {
                file.mkdirs();
            }
    
            String path = Environment.getExternalStorageDirectory()
                    .getAbsolutePath() + "/Your Directory";
    
            File f = new File(path + "/", filename + ".mp3");
    
            Uri mUri = Uri.parse("android.resource://" + getContext().getPackageName() + "/raw/" + filename);
            ContentResolver mCr = getContext().getContentResolver();
            AssetFileDescriptor soundFile;
            try {
                soundFile = mCr.openAssetFileDescriptor(mUri, "r");
            } catch (FileNotFoundException e) {
                soundFile = null;
            }
    
            try {
                byte[] readData = new byte[1024];
                FileInputStream fis = soundFile.createInputStream();
                FileOutputStream fos = new FileOutputStream(f);
                int i = fis.read(readData);
    
                while (i != -1) {
                    fos.write(readData, 0, i);
                    i = fis.read(readData);
                }
    
                fos.close();
            } catch (IOException io) {
            }
    
            ContentValues values = new ContentValues();
            values.put(MediaStore.MediaColumns.DATA, f.getAbsolutePath());
            values.put(MediaStore.MediaColumns.TITLE, name1);
            values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
            values.put(MediaStore.MediaColumns.SIZE, f.length());
            values.put(MediaStore.Audio.Media.ARTIST, R.string.app_name);
            values.put(MediaStore.Audio.Media.IS_NOTIFICATION, true);
    
    
            Uri uri = MediaStore.Audio.Media.getContentUriForPath(f.getAbsolutePath());
            getContext().getContentResolver().delete(uri, MediaStore.MediaColumns.DATA + "=\"" + f.getAbsolutePath() + "\"", null);
            Uri newUri = mCr.insert(uri, values);
    
            try {
                RingtoneManager.setActualDefaultRingtoneUri(getContext(),
                        RingtoneManager.TYPE_NOTIFICATION, newUri);
                Settings.System.putString(mCr, Settings.System.NOTIFICATION_SOUND,
                        newUri.toString());
                Toast.makeText(getContext(), "Done", Toast.LENGTH_SHORT).show();
    
            } catch (Throwable t) {
    
            }
        }
    
    0 讨论(0)
提交回复
热议问题