public void SetRingtone(string path) { Java.IO.File sdfile = new Java.IO.File(path); ContentValues values = new ContentValues(); values.Put(MediaStore.MediaColumns.Data, sdfile.AbsolutePath); values.Put(MediaStore.MediaColumns.Title, sdfile.Name); values.Put(MediaStore.MediaColumns.MimeType, "audio/mp3"); values.Put(MediaStore.Audio.Media.InterfaceConsts.IsRingtone, true); values.Put(MediaStore.Audio.Media.InterfaceConsts.IsAlarm, true); values.Put(MediaStore.Audio.Media.InterfaceConsts.IsNotification, false); values.Put(MediaStore.Audio.Media.InterfaceConsts.IsMusic, false); //Android.Net.Uri uri = MediaStore.Audio.Media.GetContentUriForPath(sdfile.AbsolutePath); //ContentResolver resolver = this.context.ContentResolver; //Android.Net.Uri newuri = resolver.Insert(uri, values); Android.Net.Uri oldRingtoneUri = RingtoneManager.GetActualDefaultRingtoneUri(this.Context, RingtoneType.Ringtone); Android.Net.Uri oldAlarmUri = RingtoneManager.GetActualDefaultRingtoneUri(this.Context, RingtoneType.Alarm); Android.Net.Uri uri2 = MediaStore.Audio.Media.GetContentUriForPath(sdfile.AbsolutePath); Android.Net.Uri newuri2 = null; //新增铃声URI ID string deleteid = ""; ICursor cursor = this.Context.ContentResolver.Query(uri2, null, MediaStore.MediaColumns.Data + "=?", new string[] { path }, null); if (cursor.MoveToFirst()) { deleteid = cursor.GetString(cursor.GetColumnIndex("_id")); } string ringtoneid = ""; string alarmid = ""; if (null != oldRingtoneUri) { ringtoneid = oldRingtoneUri.LastPathSegment; } if (null != oldAlarmUri) { alarmid = oldAlarmUri.LastPathSegment; } Android.Net.Uri setRingtoneUri; if (ringtoneid.Equals(deleteid)) { //setRingtoneUri = newuri2; //如果新添加的铃声ID和已设置的铃声ID相同,不需要重新设置铃声,因为重复URI也是插入不了的。 //setRingtoneUri = oldRingtoneUri; Toast.MakeText(this.Context, "当前已是来电铃声,无需重复设置!", ToastLength.Short).Show(); } else { if (alarmid.Equals(deleteid)) { setRingtoneUri = oldAlarmUri; RingtoneManager.SetActualDefaultRingtoneUri(this.Context, RingtoneType.Ringtone, setRingtoneUri); Toast.MakeText(this.Context, "来电设置成功!", ToastLength.Short).Show(); } else { Context.ContentResolver.Delete(uri2, MediaStore.MediaColumns.Data + "=\"" + sdfile.AbsolutePath + "\"", null); newuri2 = Context.ContentResolver.Insert(uri2, values); //setRingtoneUri = oldRingtoneUri; //如果新添加的铃声ID和已设置的铃声ID不同,就新增铃声 if (newuri2 != null) { setRingtoneUri = newuri2; RingtoneManager.SetActualDefaultRingtoneUri(this.Context, RingtoneType.Ringtone, setRingtoneUri); Toast.MakeText(this.Context, "来电设置成功!", ToastLength.Short).Show(); } } } }
/* JAVA: * if(ringtone != null && ringtone.isPlaying()) * ringtone.stop(); * * Uri uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE); * //Uri uri = RingtoneManager.getActualDefaultRingtoneUri(this, RingtoneManager.TYPE_RINGTONE); * //Uri uri = RingtoneManager.getActualDefaultRingtoneUri(getApplicationContext(), RingtoneManager.TYPE_RINGTONE); * ringtone = RingtoneManager.getRingtone(getApplicationContext(), uri); * * if(ringtone != null) * ringtone.play(); */ private void setAsRingtone(string audioName) { string folderName = Android.OS.Environment.ExternalStorageDirectory.AbsolutePath + "/" + Android.OS.Environment.DirectoryRingtones + "/"; string audioFile = audioName + ".mp3"; Log.Info(TAG, "Ringtones folder: " + folderName); Log.Info(TAG, "audio file: " + audioFile); var soundFilePath = Path.Combine(folderName, audioFile); Log.Info(TAG, "full path: " + soundFilePath); using (FileStream writeStream = File.OpenWrite(soundFilePath)) { //var readStream = context.Resources.OpenRawResource(soundId[pos]); //var readStream = Resources.OpenRawResource(audioName); var readStream = Assets.Open(audioFile); BinaryWriter writer = new BinaryWriter(writeStream); // create a buffer to hold the bytes byte[] buffer = new Byte[1024]; int bytesRead; // while the read method returns bytes keep writing them to the output stream while ((bytesRead = readStream.Read(buffer, 0, 1024)) > 0) { writeStream.Write(buffer, 0, bytesRead); } } //We now create a new content values object to store all the information about the ringtone. ContentValues values = new ContentValues(); //values.Put(MediaStore.MediaColumns.Data, fi2.DirectoryName); values.Put(MediaStore.MediaColumns.Data, soundFilePath); if (audioName == "bepohello") { values.Put(MediaStore.MediaColumns.Title, "Bepo Hello"); } else if (audioName == "beporooster") { values.Put(MediaStore.MediaColumns.Title, "Bepo rooster"); } //values.Put(MediaStore.MediaColumns.Title, "Lelux"); //values.Put(MediaStore.MediaColumns.Size, fi2.Length); values.Put(MediaStore.MediaColumns.MimeType, "audio/mp3"); values.Put(AudioColumns.Artist, "MARCELO"); values.Put(AudioColumns.IsRingtone, true); values.Put(AudioColumns.IsNotification, false); values.Put(AudioColumns.IsAlarm, false); values.Put(AudioColumns.IsMusic, false); // We put in the DDBB of MediaStore //Uri uri = MediaStore.Audio.Media.getContentUriForPath(f.getAbsolutePath()); //Uri newUri = getBaseContext().getContentResolver().insert(uri, values); // Set as default //RingtoneManager.setActualDefaultRingtoneUri(getBaseContext(), RingtoneManager.TYPE_RINGTONE, newUri); //Android.Net.Uri uri = Media.GetContentUriForPath(soundFilePath); //Android.Net.Uri newUri = ContentResolver.Insert(uri, values); var uri = Media.GetContentUriForPath(soundFilePath); //var uri = MediaStore.Audio.Media.GetContentUriForPath(soundFilePath); //var cr = this.ContentResolver; var newUri = cr.Insert(uri, values); //this.ContentResolver.Insert(Android.Provider.MediaStore.Audio.Media.ExternalContentUri, values); //Android.Net.Uri newUri = this.ContentResolver.Insert(uri, values); //Android.Net.Uri newUri = BaseContext.ContentResolver.Insert(uri, values); RingtoneManager.SetActualDefaultRingtoneUri(this, RingtoneType.Ringtone, newUri); Log.Info(TAG, "uri: " + uri); Log.Info(TAG, "newUri: " + newUri); }