在 android 中以编程方式从原始文件夹设置为默认铃声
set as default ringtone from raw folder programmatically in android
我试过这段代码,它可以很好地加载声音文件到铃声 directory.I 可以手动 select 来自弹出窗口的声音..但是它无法设置为默认铃声programmatically.plz 帮助我以编程方式将声音设置为默认铃声
setContentView(R.layout.activity_main);
String exStoragePath = Environment.getExternalStorageDirectory().getAbsolutePath();
path=(exStoragePath +"/media/alarms/");
// saveas();
saveas(RingtoneManager.TYPE_RINGTONE);
}
// In this method, we need to copy the mp3 file to the sd card location from
// where android picks up ringtone files
// After copying, we make the mp3 as current ringtone
public boolean saveas(int type) {
enter code here
byte[] buffer = null;
InputStream fIn = getBaseContext().getResources().openRawResource(
R.raw.sound);
int size = 0;
try {
size = fIn.available();
buffer = new byte[size];
fIn.read(buffer);
fIn.close();
} catch (IOException e) {
return false;
}
String filename = "sound";
boolean exists = (new File(path)).exists();
if (!exists) {
new File(path).mkdirs();
}
FileOutputStream save;
try {
save = new FileOutputStream(path + filename);
save.write(buffer);
save.flush();
save.close();
} catch (FileNotFoundException e) {
return false;
} catch (IOException e) {
return false;
}
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + path + filename + ".mp3"
+ Environment.getExternalStorageDirectory())));
enter code here
File k = new File(path, filename);
ContentValues values = new ContentValues();
long current = System.currentTimeMillis();
values.put(MediaStore.MediaColumns.DATA, path + filename );
values.put(MediaStore.MediaColumns.TITLE, filename );
values.put(MediaStore.Audio.Media.DATE_ADDED, (int) (current / 1000));
values.put(MediaStore.Audio.Media.MIME_TYPE, "audio/mp3");
//new
values.put(MediaStore.Audio.Media.ARTIST, "cssounds ");
values.put(MediaStore.Audio.Media.IS_RINGTONE, true);
values.put(MediaStore.Audio.Media.IS_NOTIFICATION, false);
values.put(MediaStore.Audio.Media.IS_ALARM, false);
values.put(MediaStore.Audio.Media.IS_MUSIC, false);
RingtoneManager.getRingtone(context,this.getContentResolver()
.insert(MediaStore.Audio.Media.getContentUriForPath(k
.getAbsolutePath()), values));
return true;
}
删除此代码
RingtoneManager.getRingtone(context,this.getContentResolver()
.insert(MediaStore.Audio.Media.getContentUriForPath(k
.getAbsolutePath()), values));
并将这些行代码放在 return true 及其工作之前
Uri newUri = this.getContentResolver()
.insert(MediaStore.Audio.Media.getContentUriForPath(k
.getAbsolutePath()), values);
RingtoneManager.setActualDefaultRingtoneUri(MainActivity.this, RingtoneManager.TYPE_RINGTONE, newUri);
try {
Uri notification = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.phone_funny_bell);
Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification);
r.play();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
r.stop();
}
}, 3000);
} catch (Exception e) {
e.printStackTrace();
}
用这个。这会起作用。
将上面的代码放在 MyFirebaseMessagingService 里面 onMessageReceived
我试过这段代码,它可以很好地加载声音文件到铃声 directory.I 可以手动 select 来自弹出窗口的声音..但是它无法设置为默认铃声programmatically.plz 帮助我以编程方式将声音设置为默认铃声
setContentView(R.layout.activity_main);
String exStoragePath = Environment.getExternalStorageDirectory().getAbsolutePath();
path=(exStoragePath +"/media/alarms/");
// saveas();
saveas(RingtoneManager.TYPE_RINGTONE);
}
// In this method, we need to copy the mp3 file to the sd card location from
// where android picks up ringtone files
// After copying, we make the mp3 as current ringtone
public boolean saveas(int type) {
enter code here
byte[] buffer = null;
InputStream fIn = getBaseContext().getResources().openRawResource(
R.raw.sound);
int size = 0;
try {
size = fIn.available();
buffer = new byte[size];
fIn.read(buffer);
fIn.close();
} catch (IOException e) {
return false;
}
String filename = "sound";
boolean exists = (new File(path)).exists();
if (!exists) {
new File(path).mkdirs();
}
FileOutputStream save;
try {
save = new FileOutputStream(path + filename);
save.write(buffer);
save.flush();
save.close();
} catch (FileNotFoundException e) {
return false;
} catch (IOException e) {
return false;
}
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + path + filename + ".mp3"
+ Environment.getExternalStorageDirectory())));
enter code here
File k = new File(path, filename);
ContentValues values = new ContentValues();
long current = System.currentTimeMillis();
values.put(MediaStore.MediaColumns.DATA, path + filename );
values.put(MediaStore.MediaColumns.TITLE, filename );
values.put(MediaStore.Audio.Media.DATE_ADDED, (int) (current / 1000));
values.put(MediaStore.Audio.Media.MIME_TYPE, "audio/mp3");
//new
values.put(MediaStore.Audio.Media.ARTIST, "cssounds ");
values.put(MediaStore.Audio.Media.IS_RINGTONE, true);
values.put(MediaStore.Audio.Media.IS_NOTIFICATION, false);
values.put(MediaStore.Audio.Media.IS_ALARM, false);
values.put(MediaStore.Audio.Media.IS_MUSIC, false);
RingtoneManager.getRingtone(context,this.getContentResolver()
.insert(MediaStore.Audio.Media.getContentUriForPath(k
.getAbsolutePath()), values));
return true;
}
删除此代码
RingtoneManager.getRingtone(context,this.getContentResolver()
.insert(MediaStore.Audio.Media.getContentUriForPath(k
.getAbsolutePath()), values));
并将这些行代码放在 return true 及其工作之前
Uri newUri = this.getContentResolver()
.insert(MediaStore.Audio.Media.getContentUriForPath(k
.getAbsolutePath()), values);
RingtoneManager.setActualDefaultRingtoneUri(MainActivity.this, RingtoneManager.TYPE_RINGTONE, newUri);
try {
Uri notification = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.phone_funny_bell);
Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification);
r.play();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
r.stop();
}
}, 3000);
} catch (Exception e) {
e.printStackTrace();
}
用这个。这会起作用。
将上面的代码放在 MyFirebaseMessagingService 里面 onMessageReceived