Example #1
0
        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();
                    }
                }
            }
        }
Example #2
0
        /* 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);
        }