`
坦克狗
  • 浏览: 21546 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Media开发之铃声设置(RingtoneManager)

阅读更多
    
搞个这么个小东西费了4个小时,还好问题解决了。


package rocka.media.ringtong;

import java.io.File;

import android.app.Activity;
import android.content.Intent;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class Media_RingTongActivity extends Activity {
	//定义三个按钮
	private Button mRingtongButton;
	private Button mAlarmButton;
	private Button mNotificationButton;
	
	//定义类型
	private static final int RingtongButton=0;
	private static final int AlarmButton=1;
	private static final int NotificationButton=2;
	
	//铃声文件夹
	private String strRingtongFolder="/sdcard/media/ringtones";
	private String strAlarmFolder="/sdcard/media/alarms";
	private String strNotificationFolder="/sdcard/media/notifications";
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mRingtongButton=(Button)findViewById(R.id.myRingtongButton);
        mRingtongButton.setOnClickListener(new myRingtongButtonListener());
        mAlarmButton=(Button)findViewById(R.id.myAlarmButton);
        mAlarmButton.setOnClickListener(new myAlarmButtonListener());
        mNotificationButton=(Button)findViewById(R.id.myNotificationButton);
        mNotificationButton.setOnClickListener(new myNotificationButtonListener());
    }
    
    //设置来电铃声监听器
    private class myRingtongButtonListener implements OnClickListener{
		@Override
		public void onClick(View v) {
			if(isFolder(strRingtongFolder)){
				//打开系统铃声设置
				Intent intent=new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
				intent.putExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI, true);
				//类型为来电ringtong
				intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_RINGTONE);
				//设置显示的题目
				intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "设置来电的铃声");
				//当设置完成之后返回到当前的activity
				startActivityForResult(intent, RingtongButton);
			}
		}
    }
    
    //设置闹钟铃声监听器
    private class myAlarmButtonListener implements OnClickListener{
 		@Override
 		public void onClick(View v) {
 			if(isFolder(strAlarmFolder)){
 				Intent intent=new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
 				intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_ALARM);
 				intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "设置闹铃铃声");
 				startActivityForResult(intent, AlarmButton);
 			}
 		}
     }
    
    //设置通知铃声监听器
    private class myNotificationButtonListener implements OnClickListener{
 		@Override
 		public void onClick(View v) {
 			if(isFolder(strNotificationFolder)){
 				Intent intent=new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
 				intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_NOTIFICATION);
 				intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "设置通知铃声");
 				startActivityForResult(intent, NotificationButton);
 			}
 		}
    }
    //检查是否存在指定的文件夹,如果不存在就创建
    private boolean isFolder(String strFolder){
    	boolean tmp = false;
		File f1 = new File(strFolder);
		if (!f1.exists())
		{
			if (f1.mkdirs())
			{
				tmp = true;
			}
			else
			{
				tmp = false;
			}
		}
		else
		{
			tmp = true;
		}
		return tmp;
    }
//设置铃声之后的回调函数
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		if(resultCode!=RESULT_OK){
			return;
		}
		switch(requestCode){
			case RingtongButton:
				try {
					 //得到我们选择的铃声
					 Uri pickedUri=data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
					 //将我们选择的铃声选择成默认
					 if(pickedUri!=null){
						 RingtoneManager.setActualDefaultRingtoneUri(Media_RingTongActivity.this, RingtoneManager.TYPE_RINGTONE, pickedUri);
					 }
				} catch (Exception e) {
					e.printStackTrace();
				}
				 break;
			case AlarmButton:
				try {
					 //得到我们选择的铃声
					 Uri pickedUri=data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
					 //将我们选择的铃声选择成默认
					 if(pickedUri!=null){
						 RingtoneManager.setActualDefaultRingtoneUri(Media_RingTongActivity.this, RingtoneManager.TYPE_ALARM, pickedUri);
					 }
				} catch (Exception e) {
					e.printStackTrace();
				}
				break;
			case NotificationButton:
				try {
					 //得到我们选择的铃声
					 pickedUri=data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
					 //将我们选择的铃声选择成默认
					 if(pickedUri!=null){
						 RingtoneManager.setActualDefaultRingtoneUri(Media_RingTongActivity.this, RingtoneManager.TYPE_NOTIFICATION, pickedUri);
					 }
				} catch (Exception e) {
					e.printStackTrace();
				}
				break;
		}
		super.onActivityResult(requestCode, resultCode, data);
	}
}

1.布局文件就是三个按钮,没什么好说的了.

2.在真机盖世兔上测试了一下,可以运行,在模拟器测试的童鞋要注意了,每次把音频文件push到sdcard中得时候,必须重启模拟器,模拟器才会应用设置,不然是检索不到的哦,这点我后面才发现的.

3.系统的原始声音存放在/system/media/audio/文件中

4.最后一点不要忘记给应用程序加权限了:

   
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>



  • 大小: 29 KB
1
1
分享到:
评论

相关推荐

    Android铃声设置软件源代码

    在Android平台上,开发一款用于铃声、短信提示音和闹钟设置的应用程序是一个常见的任务,这需要对Android系统架构和音频处理有深入的理解。本文将详细介绍Android铃声设置软件源代码的相关知识点,以及如何实现此类...

    android 铃声设置相关源码

    - `src`目录下的Java类:通常会有一个专门的`RingtoneManager`类或者类似的功能类,用于处理铃声选择和设置。它可能包含方法如`getRingtoneList()`获取系统和用户自定义的铃声列表,以及`setRingtone()`用于设置新...

    android查看与设置来电铃声

    - 当用户选择了一个铃声后,使用`RingtoneManager`的`setActualDefaultRingtoneUri()`方法,传入适当的类型(如`RingtoneManager.TYPE_RINGTONE`)和所选音频的URI,来设置新的来电铃声。 - 为了确保设置成功,...

    Android设置铃声实现代码

    这里的参数分别为上下文(`this`)、铃声类型(`RingtoneManager.TYPE_RINGTONE`表示来电铃声)以及要设置为默认的Uri。 值得注意的是,为了安全性和权限问题,从Android 6.0(API级别23)开始,你需要在运行时请求...

    Android获取系统铃声并选择、保存demo

    在Android开发中,获取系统铃声并允许用户选择和保存是一项常见的需求,尤其在创建具有个性化设置的应用时。本文将详细解析如何实现这样一个功能,基于提供的"Android获取系统铃声并选择、保存demo"。 首先,我们...

    获取手机铃声

    在智能手机的世界里,个性化设置是用户展现自我风格的重要方式之一,而手机铃声就是其中的一环。"获取手机所有铃声"这个主题涉及到的是如何访问并管理设备上的系统铃声资源,让用户的手机在来电、通知或其他特定事件...

    手机联系人铃声设定

    在Android中,可以遍历`RingtoneManager`的默认音频流来获取可用铃声,然后通过`ContactsContract.Data`表更新联系人的铃声字段。iOS上,可使用`MPMediaQuery`查询音乐库中的歌曲,用户选定后,通过`...

    android开发技巧总汇android开发培训-教师必备.docx

    通过`RingtoneManager`和`MediaStore.Audio.Media`类,可以更改设备的默认来电铃声。 14. 开机自启动 注册BroadcastReceiver监听`ACTION_BOOT_COMPLETED`广播,可在设备启动完成后执行特定任务。 15. 线程与子线程...

    Android多媒体开发相关技巧[归类].pdf

    - `RingtoneManager`和`Ringtone`: 分别用于管理和播放铃声、闹钟和事件声音。 - `MediaScanner`: 扫描新的或已修改的媒体文件并更新MediaProvider的数据库。 - `AudioTrack`和`SoundPool`: 用于播放应用程序的...

    音乐播放器

    【音乐播放器】是一款基于Android平台自行开发的音乐应用程序,旨在提供便捷的音乐播放功能,并且尝试实现一种独特的用户体验:当设置某首歌曲为铃声时,在ListView中对应的歌曲条目后显示一个音乐图标。然而,...

    SelectRingDemo.zip

    在Android开发中,有时我们需要为用户提供自定义铃声的功能,或者展示系统内置的铃声列表供用户选择。这个"SelectRingDemo.zip"就是一个这样的示例项目,它展示了如何在Android Studio环境下实现这样的功能。让我们...

    Android试手——Dota铃声

    在本例中,Dota铃声很可能是这些格式之一,可能包含游戏中的经典音效或音乐片段。开发者需要将这些音频文件适当地转换为Android设备能够识别和播放的格式。 接下来,我们需要了解Android项目的资源管理。在Android ...

    Android多媒体开发

    - **RingtoneManager**:管理响铃、通知等声音,可以访问系统铃声库。 - **Ringtone**:播放系统铃声、通知声等。 - **SoundPool**:快速播放短小的声音,如游戏音效。 - **ToneGenerator**:用于生成DTMF(双音多频...

Global site tag (gtag.js) - Google Analytics