转载请注明本文出自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)(来电铃声的设置、手机闹钟、手势识别)(新)相关推荐

  1. Android来电铃声默认设置的实现方法与如何设置语音来电的默认铃声

    Android来电铃声默认设置的实现方法与如何设置语音来电的默认铃声 一.Android来电铃声默认设置的实现方法 Andoird默认来电铃声的设置方法为修改build/target/product/ ...

  2. 我的Android进阶之旅------Android系统设置默认来电铃声、闹钟铃声、通知铃声

    首先了解Android系统本身提供的默认铃声文件,这些文件都放在  /system/media/audio  目录下. /system/media/audio/ringtones   系统来电铃声 / ...

  3. android qq 铃声大小设置,手机QQ自定义铃声怎么设置?手机QQ自定义铃声设置教程...

    怎么设置手机QQ自定义铃声?手机QQ提示声怎么自定义?关于自定义手机QQ铃声的教程尽在腾牛个性网,本站提供无需ROOT,超级简单的修改提示音方法,相信对大家有所帮助. 对于手机QQ万年不变提示铃声我想 ...

  4. java闹钟程序声音_跪求高手帮忙写一个JAVA手机闹钟程序 实现添加铃声和设置多闹钟...

    展开全部 import java.util.*; import java.awt.*; import java.applet.*; import java.text.*; public class A ...

  5. android 在音乐播放器中设置一首歌曲为来电铃声,设置不起作用

    AudioProfile,情景模式,多卡设置铃声 系统开启Multi_ringtone_support.进入菜单--音乐--歌曲列表--长按一首歌曲选择设为手机铃声,提示已成功设置,但是进入设置中情景 ...

  6. android 手机铃声设置铃声设置,Android 修改系统来电铃声

    前言         欢迎大家我分享和推荐好用的代码段~~声明         欢迎转载,但请保留文章原始出处: CSDN:http://www.csdn.net 雨季o莫忧离:http://blog ...

  7. ym——Android从零开始(27)(山寨版微信-上)(新)

    转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),谢谢支持! 山寨版微信(上) 即时通信 我们使用了Socket编程(套接字编程) 服务器 创建Se ...

  8. android手机电话铃声设置,安卓手机铃声怎么设置

    网上有很多安卓手机铃声的设置教程,说什么SD卡里建立这个那个的文件夹,那问题是怎么才能进到SD卡里去建立文件夹啊?手机里哪个选项里进去呢? 这里小编告诉你,可以通过电脑连接数据线管理SD卡.下面介绍两 ...

  9. 如何编写程序设置Android来电铃声

    转自:http://www.jizhuomi.com/android/example/360.html 我们在拿到新手机后通常会为其设置来年铃声,那么怎样通过代码来设置Android来电铃声,本文就为 ...

最新文章

  1. poj-1031-fence(不是我写的,我只是想看着方便)
  2. 渲染管道(2)应用阶段“功能”
  3. 采用redis+ThreadLocal获取全局的登录用户信息(一)
  4. ASP.NET 实现Base64文件流下载PDF
  5. Win11笔记本电源计划怎么设置 Win11设置电源计划为高性能的方法
  6. ThreadLocal到底有没有内存泄漏?从源码角度来剖析一波
  7. 14 SD配置-企业结构-分配-分配销售组织-分销渠道-工厂
  8. 数据库设计三大范式应用实例剖析(讲得比较清楚)
  9. 华为新系统鸿蒙效果,19款华为手机内测新系统,流畅度比肩苹果iOS,优先体验鸿蒙OS...
  10. webpack配置信息说明
  11. ArcFace算法笔记
  12. 【美化§§小清新的身影xp电脑主题】
  13. python mysqldb 安装_python MySQLdb在windows环境下的快速安装、问题解决方式
  14. 一个级数求和:看作二阶导,等比数列求和再求二阶导
  15. 平面设计中的字体设计新花样
  16. 抽象代数----Sn可由两个元素生成
  17. Net Framework 4.7.2安装
  18. 推理题c语言思路,数字推理题如何确立思路
  19. 上海市浦东新区37街镇最新版行政区域
  20. 企业行业树形图,层级结构展示

热门文章

  1. linux命令查看内存数据,Linux 查看内存条数据和大小命令
  2. UOS打开开发者模式
  3. 最全前端性能优化总结
  4. 阿里系——盒马鲜生的Embedding策略
  5. conda在指定环境下安装Gurobi包
  6. win10 子系统 ubuntu GPU驱动,CUDA, CUDNN安装与 win10 GPU 机器学习性能对比, numa_node 问题
  7. Linux Ubuntu基本操作指令
  8. 玩游戏手机显示断开服务器什么意思,手机上打游戏服务器失去连接怎么办
  9. XMind 8 免费
  10. Fedora31升级Fedora32命令行模式操作过程