Media开发之铃声设置(RingtoneManager)

:shock: :shock: :shock: :shock: :shock:
搞个这么个小东西费了4个小时,还好问题解决了。
:lol: :lol: :lol: :lol: :lol:

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);
}
}

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

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

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

4.最后一点不要忘记给应用程序加权限了:[/b]
   
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>


[img]http://dl.iteye.com/upload/attachment/580406/04fb03a0-a919-3a12-9a96-efa35ac6a211.png[/img]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值