ym——Android从零开始(28)(来电铃声的设置、手机闹钟、手势识别)(新)
转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),谢谢支持!
来电铃声的设置、手机闹钟、手势识别来电铃声的设置
MediaStore简介
MediaStore是android系统提供的一个多媒体数据库,android中多媒体信息都可以从这里提取。MediaStore包括了多媒体数据库的所有信息,包括音频,视频和图像,android把所有的多媒体数据库接口进行了封装,所有的数据库不用自己进行创建,直接使用ContentResolver调用那些封装好的接口就可以进行数据库的操作了
得到sdcard里面所有的歌曲,使用了异步查询,注册绑定上下文菜单,从MediaStore得到选中信息
//设置铃声需要权限(setting)RingtoneManager.setActualDefaultRingtoneUri(this,RingtoneManager.TYPE_RINGTONE,uri);public class MainActivity extends Activity{private static final int MENU_ID_SET_RINGTONE = 0;privateListView lv;private QueryHandler queryHandler;private String[] projection = new String[]{Media._ID,Media.DISPLAY_NAME};privateMyAdapter adatper;/**Called when the activity is first created. */@Overridepublic void onCreate(BundlesavedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);lv = (ListView) findViewById(R.id.lv);adatper = new MyAdapter(this, null);lv.setAdapter(adatper);queryHandler = new QueryHandler(getContentResolver());startQuery();registerForContextMenu(lv);}@Overridepublic void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfomenuInfo) {// TODO Auto-generated method stubsuper.onCreateContextMenu(menu, v,menuInfo);menu.add(0, MENU_ID_SET_RINGTONE, 0,"设置为手机铃声");}@Overridepublic boolean onContextItemSelected(MenuItem item) {// TODO Auto-generated method stub//得到要设置手机铃声是那首歌(确定uri)//设置为铃声AdapterContextMenuInfo acmi =(AdapterContextMenuInfo) item.getMenuInfo();int position = acmi.position;Cursor c = (Cursor) adatper.getItem(position);String id = c.getString(0);Uri uri =Uri.withAppendedPath(Media.EXTERNAL_CONTENT_URI, id);//设置铃声需要权限(setting)RingtoneManager.setActualDefaultRingtoneUri(this,RingtoneManager.TYPE_RINGTONE,uri);return super.onContextItemSelected(item);}private void startQuery(){queryHandler.startQuery(0,null,Media.EXTERNAL_CONTENT_URI,projection,null, null, null);}private class QueryHandler extends AsyncQueryHandler{public QueryHandler(ContentResolver cr) {super(cr);//TODO Auto-generated constructor stub}@Overrideprotected void onQueryComplete(int token,Object cookie, Cursor cursor) {//TODO Auto-generated method stubsuper.onQueryComplete(token,cookie, cursor);adatper.changeCursor(cursor);}}private class MyAdapter extends CursorAdapter{public MyAdapter(Context context, Cursorc) {super(context,c);//TODO Auto-generated constructor stub}@Overridepublic View newView(Context context,Cursor cursor, ViewGroup parent) {//TODO Auto-generated method stubViewview = getLayoutInflater().inflate(R.layout.item, null);ViewHolderholder = new ViewHolder();holder.tv_name= (TextView) view.findViewById(R.id.tv_name);view.setTag(holder);returnview;}@Overridepublic void bindView(View view, Contextcontext, Cursor cursor) {//TODO Auto-generated method stubViewHolderholder = (ViewHolder) view.getTag();Stringname = cursor.getString(1);holder.tv_name.setText(name);}}private class ViewHolder{TextView tv_name;}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();Cursor cursor = adatper.getCursor();if(cursor != null &&!cursor.isClosed()){cursor.close();}}
}
闹钟
AlarmManager简介
AlarmManager的使用机制有的称呼为全局定时器,有的称呼为闹钟,它的作用和Timer有点相似,有两种用法:
在指定时长后执行某项操作
周期性的执行某项操作
AlarmManager对象配合Intent使用,可以定时的开启一个Activity,发送一个BroadCast,或者开启一个Service
设置一个闹钟定时,到时间会发送一个广播,定义一个广播接受者,广播接受者在挑战到一个activity进行提示操作。
//得到闹钟服务
AlarmManager am = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
//设置闹钟
public void set(View v){Calendar calendar = Calendar.getInstance();calendar.setTimeInMillis(System.currentTimeMillis());int hourOfDay =calendar.get(Calendar.HOUR_OF_DAY);int minute =calendar.get(Calendar.MINUTE);TimePickerDialog dialog = new TimePickerDialog(this,new OnTimeSetListener() {@Overridepublic void onTimeSet(TimePicker view,int hourOfDay, int minute) {// TODO Auto-generated methodstubCalendar calendar = Calendar.getInstance();calendar.setTimeInMillis(System.currentTimeMillis());calendar.set(Calendar.HOUR_OF_DAY,hourOfDay);calendar.set(Calendar.MINUTE, minute);
Intent intent
= new Intent(getApplicationContext(),AlarmReceiver.class);
PendingIntent operation
= PendingIntent.getBroadcast(getApplicationContext(), 100, intent, 0);// 要接受广播的广播接受者指定// 单次闹钟/*am.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),operation);*/// 多次闹钟am.setRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(), 4000, operation);}},hourOfDay,minute,true);dialog.show();}
//取消闹钟
Intent intent = newIntent(getApplicationContext(),AlarmClockReceiver.class);
PendingIntent operation =PendingIntent.getBroadcast(getApplicationContext(), 100, intent, 0);
am.cancel(operation);
手势识别
手势识别使android更人性化,让我们的操作更简单,其实我们日常应用中不少地方都使用了手势识别方法,比如2011年那么火的愤怒的小鸟中的发射武器,uc浏览器的左右滑动功能,这都是可以使用android的手势识别来实现的
手势画板控件:
<android.gesture.GestureOverlayViewandroid:id="@+id/gestureOverlayView"android:layout_width="fill_parent"android:layout_height="0dip"android:layout_weight="1"android:gestureStrokeType="multiple" >
</android.gesture.GestureOverlayView>
android:gestureStrokeType="multiple"
可以设置化多笔画
把我们在自带应用里面生成的手势数据库放入我们项目的raw(新建文件夹)文件夹下面
public class MainActivity extends Activity {private GestureOverlayView g;private GestureLibrary gestureLibrary;private Gesture gesture;/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);
得到控件画板g =
(GestureOverlayView) findViewById(R.id.gestureOverlayView);
加载手势库里面的手势gestureLibrary = GestureLibraries.fromRawResource(this, R.raw.gestures);gestureLibrary.load();// 单笔识别//g.addOnGesturePerformedListener(newMyOnGesturePerformedListener()); '// 多笔识别g.addOnGesturingListener(new MyGestureListener());}private class MyGestureListener implements OnGesturingListener{@Overridepublic voidonGesturingStarted(GestureOverlayView overlay) {// TODO Auto-generated methodstub}@Overridepublic voidonGesturingEnded(GestureOverlayView overlay) {gesture = overlay.getGesture();}}/* private class MyOnGesturePerformedListenerimplements OnGesturePerformedListener{@Overridepublic voidonGesturePerformed(GestureOverlayView overlay,Gesture gesture) {// TODO Auto-generated methodstubregconize(gesture);}}*/public void ok(View v){regconize(gesture);g.clear(true);}public void cancle(View v){g.clear(true);}private void regconize(Gesture gesture){// 识别手势ArrayList<Prediction>recognizes = gestureLibrary.recognize(gesture);if (recognizes.isEmpty()) {Toast.makeText(this, "没找到该手势", 300).show();}else{// 得到匹配手势Prediction prediction = recognizes.get(0);// 得到匹配度double score = prediction.score;if(score>5){String name =prediction.name;if("call".equals(name)){Toast.makeText(this, "call", 300).show();}else if("close".equals(name)){MainActivity.this.finish();}else{Toast.makeText(this, "没找到该手势", 300).show();}}}}
}
课后问题
1. 怎么获取手机里面的歌曲?
通过MediaStore
2. 怎么设置手机的来电铃声?
RingtoneManager.setActualDefaultRingtoneUri(
this,
RingtoneManager.TYPE_RINGTONE,
uri);
3. 要设置闹钟应该使用哪个类?
AlarmManager 、TimePickerDialog、setRepeating(。。。)
4. 手势识别使用哪个控件?
GestureOverlayView
ym——Android从零开始(28)(来电铃声的设置、手机闹钟、手势识别)(新)相关推荐
- Android来电铃声默认设置的实现方法与如何设置语音来电的默认铃声
Android来电铃声默认设置的实现方法与如何设置语音来电的默认铃声 一.Android来电铃声默认设置的实现方法 Andoird默认来电铃声的设置方法为修改build/target/product/ ...
- 我的Android进阶之旅------Android系统设置默认来电铃声、闹钟铃声、通知铃声
首先了解Android系统本身提供的默认铃声文件,这些文件都放在 /system/media/audio 目录下. /system/media/audio/ringtones 系统来电铃声 / ...
- android qq 铃声大小设置,手机QQ自定义铃声怎么设置?手机QQ自定义铃声设置教程...
怎么设置手机QQ自定义铃声?手机QQ提示声怎么自定义?关于自定义手机QQ铃声的教程尽在腾牛个性网,本站提供无需ROOT,超级简单的修改提示音方法,相信对大家有所帮助. 对于手机QQ万年不变提示铃声我想 ...
- java闹钟程序声音_跪求高手帮忙写一个JAVA手机闹钟程序 实现添加铃声和设置多闹钟...
展开全部 import java.util.*; import java.awt.*; import java.applet.*; import java.text.*; public class A ...
- android 在音乐播放器中设置一首歌曲为来电铃声,设置不起作用
AudioProfile,情景模式,多卡设置铃声 系统开启Multi_ringtone_support.进入菜单--音乐--歌曲列表--长按一首歌曲选择设为手机铃声,提示已成功设置,但是进入设置中情景 ...
- android 手机铃声设置铃声设置,Android 修改系统来电铃声
前言 欢迎大家我分享和推荐好用的代码段~~声明 欢迎转载,但请保留文章原始出处: CSDN:http://www.csdn.net 雨季o莫忧离:http://blog ...
- ym——Android从零开始(27)(山寨版微信-上)(新)
转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),谢谢支持! 山寨版微信(上) 即时通信 我们使用了Socket编程(套接字编程) 服务器 创建Se ...
- android手机电话铃声设置,安卓手机铃声怎么设置
网上有很多安卓手机铃声的设置教程,说什么SD卡里建立这个那个的文件夹,那问题是怎么才能进到SD卡里去建立文件夹啊?手机里哪个选项里进去呢? 这里小编告诉你,可以通过电脑连接数据线管理SD卡.下面介绍两 ...
- 如何编写程序设置Android来电铃声
转自:http://www.jizhuomi.com/android/example/360.html 我们在拿到新手机后通常会为其设置来年铃声,那么怎样通过代码来设置Android来电铃声,本文就为 ...
最新文章
- poj-1031-fence(不是我写的,我只是想看着方便)
- 渲染管道(2)应用阶段“功能”
- 采用redis+ThreadLocal获取全局的登录用户信息(一)
- ASP.NET 实现Base64文件流下载PDF
- Win11笔记本电源计划怎么设置 Win11设置电源计划为高性能的方法
- ThreadLocal到底有没有内存泄漏?从源码角度来剖析一波
- 14 SD配置-企业结构-分配-分配销售组织-分销渠道-工厂
- 数据库设计三大范式应用实例剖析(讲得比较清楚)
- 华为新系统鸿蒙效果,19款华为手机内测新系统,流畅度比肩苹果iOS,优先体验鸿蒙OS...
- webpack配置信息说明
- ArcFace算法笔记
- 【美化§§小清新的身影xp电脑主题】
- python mysqldb 安装_python MySQLdb在windows环境下的快速安装、问题解决方式
- 一个级数求和:看作二阶导,等比数列求和再求二阶导
- 平面设计中的字体设计新花样
- 抽象代数----Sn可由两个元素生成
- Net Framework 4.7.2安装
- 推理题c语言思路,数字推理题如何确立思路
- 上海市浦东新区37街镇最新版行政区域
- 企业行业树形图,层级结构展示