700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > ym——Android从零开始(28)(来电铃声的设置 手机闹钟 手势识别)(新)

ym——Android从零开始(28)(来电铃声的设置 手机闹钟 手势识别)(新)

时间:2022-12-18 02:04:17

相关推荐

ym——Android从零开始(28)(来电铃声的设置 手机闹钟 手势识别)(新)

转载请注明本文出自Cym的博客(/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更人性化,让我们的操作更简单,其实我们日常应用中不少地方都使用了手势识别方法,比如那么火的愤怒的小鸟中的发射武器,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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。