android-铃声的设置与播放_weixin_33755847的博客-程序员宅基地

技术标签: java  移动开发  

在android系统中,不同铃声存放的铃声路径:
/system/media/audio/ringtones        来电铃声
 /system/media/audio/notifications        短信通知铃声
 /system/media/audio/alarms        闹钟铃声
铃声的设置:
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.widget.Button;
public class Activity01 extends Activity
{
	/* 3个按钮 */
	private Button mButtonRingtone;
	private Button mButtonAlarm;
	private Button mButtonNotification;

	/* 自定义的类型 */
	public static final int ButtonRingtone			= 0;
	public static final int ButtonAlarm				= 1;
	public static final int ButtonNotification		= 2;
	/* 铃声文件夹 */
	private String strRingtoneFolder = "/sdcard/music/ringtones";
	private String strAlarmFolder = "/sdcard/music/alarms";
	private String strNotificationFolder = "/sdcard/music/notifications";


	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
	
		mButtonRingtone = (Button) findViewById(R.id.ButtonRingtone);
		mButtonAlarm = (Button) findViewById(R.id.ButtonAlarm);
		mButtonNotification = (Button) findViewById(R.id.ButtonNotification);
		/* 设置来电铃声 */
		mButtonRingtone.setOnClickListener(new Button.OnClickListener() 
		{
			@Override
			public void onClick(View arg0)
			{
				if (bFolder(strRingtoneFolder))
				{
					//打开系统铃声设置
					Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
					//类型为来电RINGTONE
					intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_RINGTONE);
					//设置显示的title
					intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "设置来电铃声");
					//当设置完成之后返回到当前的Activity
					startActivityForResult(intent, ButtonRingtone);
				}
			}
		});
		/* 设置闹钟铃声 */
		mButtonAlarm.setOnClickListener(new Button.OnClickListener() 
		{
			@Override
			public void onClick(View arg0)
			{
				if (bFolder(strAlarmFolder))
				{
					//打开系统铃声设置
					Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
					//设置铃声类型和title
					intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_ALARM);
					intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "设置闹铃铃声");
					//当设置完成之后返回到当前的Activity
					startActivityForResult(intent, ButtonAlarm);
				}
			}
		});
		/* 设置通知铃声 */
		mButtonNotification.setOnClickListener(new Button.OnClickListener() 
		{
			@Override
			public void onClick(View arg0)
			{
				if (bFolder(strNotificationFolder))
				{
					//打开系统铃声设置
					Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
					//设置铃声类型和title
					intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_NOTIFICATION);
					intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "设置通知铃声");
					//当设置完成之后返回到当前的Activity
					startActivityForResult(intent, ButtonNotification);
				}
			}
		});
	}
	/* 当设置铃声之后的回调函数 */
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data)
	{
		// TODO Auto-generated method stub
		if (resultCode != RESULT_OK)
		{
			return;
		}
		switch (requestCode)
		{
			case ButtonRingtone:
				try
				{
					//得到我们选择的铃声
					Uri pickedUri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
					//将我们选择的铃声设置成为默认
					if (pickedUri != null)
					{
						RingtoneManager.setActualDefaultRingtoneUri(Activity01.this, RingtoneManager.TYPE_RINGTONE, pickedUri);
					}
				}
				catch (Exception e)
				{
				}
				break;
			case ButtonAlarm:
				try
				{
					//得到我们选择的铃声
					Uri pickedUri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
					//将我们选择的铃声设置成为默认
					if (pickedUri != null)
					{
						RingtoneManager.setActualDefaultRingtoneUri(Activity01.this, RingtoneManager.TYPE_ALARM, pickedUri);
					}
				}
				catch (Exception e)
				{
				}
				break;
			case ButtonNotification:
				try
				{
					//得到我们选择的铃声
					Uri pickedUri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
					//将我们选择的铃声设置成为默认
					if (pickedUri != null)
					{
						RingtoneManager.setActualDefaultRingtoneUri(Activity01.this, RingtoneManager.TYPE_NOTIFICATION, pickedUri);
					}
				}
				catch (Exception e)
				{
				}
				break;
		}
		super.onActivityResult(requestCode, resultCode, data);
	}
	//检测是否存在指定的文件夹 
	//如果不存在则创建
	private boolean bFolder(String strFolder)
	{
		boolean btmp = false;
		File f = new File(strFolder);
		if (!f.exists())
		{
			if (f.mkdirs())
			{
				btmp = true;
			}
			else
			{
				btmp = false;
			}
		}
		else
		{
			btmp = true;
		}
		return btmp;
	}
}

铃声的播放:
  player = new MediaPlayer();
	      try{
	      player.setDataSource(context, pickUri);
	      }catch(Exception e){
	    	  e.printStackTrace();
	      }
	     final AudioManager  audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
	     if(audioManager.getStreamVolume(AudioManager.STREAM_ALARM)!=0){
         player.setAudioStreamType(AudioManager.STREAM_ALARM);
         player.setLooping(true);
         try {
			player.prepare();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
         player.start();
    	}


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_33755847/article/details/86071878

智能推荐

linetv_LINE TV台湾版_玛丽酥酥的博客-程序员宅基地

LINE TV台湾版是LINE专门为台湾地区的用户打造的一款视频播放软件,软件内含丰富的资源,包括一些最新的和热门的电影、电视剧以及台湾综艺节目,如果大家喜欢看台湾那边的电视剧或者综艺节目的话那就千万不要错过。温馨提示大家也可以下载LINE TV国际版本来观看全球的视频资源。软件功能随时随地立即免费观赏!透过你的手机与桌机尽情观赏电视影集与影音片段观赏全集完整电视偶像剧、综艺节目、音乐 MV 以及..._linetv账号共享

Verilog数据拼接与拆分_verilog 数字中间分割_码农讲习所的博客-程序员宅基地

1. Verilog中数据拼接,使用拼接运算符例如:reg [15:0] regA;reg[7:0] regB = 8'd12;reg[7:0] regC = 8'd34;regA <= {regB ,regC }; //把regB和regC拼接成regA。2.Verilog中数据拆分例如:wire[15:0] A; wire[7:0] B; ..._verilog 数字中间分割

黑马程序员_Java高新技术三_javabean、注解的应用_jeffrey_Zhao的博客-程序员宅基地

---------------------- android培训、java培训、期待与您交流! ---------------------- 内省的概念理解:IntroSpector--》主要用于对JavaBean进行操作--》JavaBean是特殊的

江南大学计算机操作系统试题,操作系统期末试题江南大学.pdf_weixin_39550379的博客-程序员宅基地

操作系统期末试卷 A选择题 (前 20 题为单选题,每小题 1 分, 21 至 25 题为多选题,每题 2 分,多选、少选、错选均无分,本题共 30 分 )1. 在分时操作系统中, ( )是衡量一个分时系统的一项重要指标。A .响应时间 B .高可靠性 C .吞吐量 ...

[Realtek sdk-4.4.1b]RTL8198D增加ConeNat支持设置NatType操作(FullCone/Symmetric/Restricted/Port Restricted )_fleetconntrackdriver_wellnw的博客-程序员宅基地

--- a/rtl819x/linux-4.4.x/drivers/net/ethernet/realtek/rtl86900/FleetConntrackDriver/include/rtk_fc_helper.h+++ b/rtl819x/linux-4.4.x/drivers/net/ethernet/realtek/rtl86900/FleetConntrackDriver/include/rtk_fc_helper.h@@ -377,6 +377,7 @@ typedef struct ..._fleetconntrackdriver

在anaconda3环境下安装jieba第三方包_mac anaconda jieba_callme杨森的博客-程序员宅基地

1、先说我在mac下如何将jieba包安装到anaconda里的。首先确认anaconda下python解释器的版本(也是为了确保在终端输入python37可以进入到python环境下,即python37在环境变量中),如下:由上图可知,我安装的anaconda下python解释器的版本是Python 3.7.3,之后在终端里输入:python37 -m pip install jieba。这..._mac anaconda jieba

随便推点

1、介绍IMX6ULL启动方式(转)_to fuir的博客-程序员宅基地

不同开发板,启动方式不一样,今天我们来介绍imx6ull开发板的启动方式,这非常重要。若不了解清楚启动方式,后面的所有开发工作便无从谈起。本文摘自100ask_imx6ull 开发板 配套学习手册-《嵌入式Linux应用开发完全手册_韦东山全系列视频文档全集V2.5》.pdf1.1 IMX6ULL 启动方式参考资料:开发板资料网盘路径:06_Datasheet(数据手册)-> Core_board->CPU->IMX6ULLRM.pdf”中《Chapter

用指针玩字符串(3)——求字符串的长度_用指针求字符串长度_ZHUANGZIHAO的博客-程序员宅基地

* Copyright (c) 2012, 烟台大学计算机学院 * All rights reserved. * 作 者:庄子豪* 完成日期:2012 年 12月23日 * 版 本 号:v1.0 * * 输入描述: * 问题描述:* 程序输出:* 问题分析: *算法设计#include using namespace std;int as_用指针求字符串长度

Linux系统openssl库的安装与报错处理_openssl-1.0.2a 编译 b_sock错误_爱学习Guocc的博客-程序员宅基地

openssl库的安装与报错安装报错安装因为最近因为其他软件需要Pyhton 2.7,所以在安装过程中碰到不少的坑,其中opensll就是一个,python的安装需要ssl模块的支持,才能编译出pip,很多时间都会报错。安装方法有两种,第一种很简单;yum install openssl-devel第二种则是源码安装,常规的安装过程是:下载安装包https://www.open..._openssl-1.0.2a 编译 b_sock错误

com.alibaba.fastjson.JSONObject的使用_Leo-_-的博客-程序员宅基地

class User { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.nam

Qt学习:深拷贝&浅拷贝&隐式共享_qt字符串深拷贝_imxiangzi的博客-程序员宅基地

综述: 当两个对象要共享一份数据时,如果数据不改变,不进行数据的复制,通过浅拷贝就可以数据的共享;而当对象需要改变数据时,则做深贝。 程序在处理共享对象时,会使用浅拷贝和深拷贝这两种方法复制对象。 (1)深拷贝:即就是生成对象的一个完整的复制品; (2)浅拷贝:只是一个引用复制(比如仅仅复制指向共享数据的指针)。这样看来,深拷贝其实是代价比较高_qt字符串深拷贝

[转]Java7中的ForkJoin并发框架初探(中)——JDK中实现简要分析_grefr2的博客-程序员宅基地

详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp85 根据前文描述的Doug Lea的理论基础,在JDK1.7中已经给出了Fork Join的实现。在Java SE 7的API中,多了ForkJoinTask、ForkJoinPool、ForkJoinWorkerThread、RecursiveAction、...

推荐文章

热门文章

相关标签