Android进阶-屏幕滑动和获取手机联系人
来源:互联网 发布:扫描软件app 编辑:程序博客网 时间:2024/05/16 19:51
Android进阶-屏幕滑动和获取手机联系人
屏幕滑动
如何使Activity之间的切换通过手势滑动来完成呢? 使用onTouchEvent()吗? 好像是可行? 但复杂的处理用户动作算法该由你自己来实现了,
可爱的Google已经帮我们实现了, 我们可以使用GestureDetetor对象来完成这件事。
实现步骤:
- 将onTouchEvent()委托给GestureDetetor来处理。
- 注册GestureDetetor的GestureListener, 并重写onFling()方法。
- Fling 可以解释为一抛, 一扔的意思, 即可以理解为响应用户有速度的滑动屏幕事件。
简单的实现屏幕滑动切换Activity的代码,在这个代码中:
- 将左右切换Activity的实现,抽取到BaseActivity来完成
- 若有Activity想要进行切换,只需继承这个BaseActivity,并复写showNextPage 与showPreviousPage方法
- 前提是可以响应 next 与 previous 按钮鼠标点击事件
- 一般有: rawX : 基于整个屏幕的X左边 X:基于控件的X坐标
如下:
public abstract class BaseActivity extends Activity { private GestureDetector mDectector; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mDectector = new GestureDetector(this, new SimpleOnGestureListener() { /** * 监听手势滑动事件 e1表示滑动的起点,e2表示滑动终点 velocityX表示水平速度 velocityY表示垂直速度 */ @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { // 判断纵向滑动幅度是否过大, 过大的话不允许切换界面 if (Math.abs(e2.getRawY() - e1.getRawY()) > 100) { Toast.makeText(MobileGuardBaseActivity.this, "不能这样划哦!", Toast.LENGTH_SHORT).show(); return true; } // 判断滑动是否过慢 if (Math.abs(velocityX) < 100) { Toast.makeText(MobileGuardBaseActivity.this, "滑动的太慢了!", Toast.LENGTH_SHORT).show(); return true; } // 向右划,上一页 if (e2.getRawX() - e1.getRawX() > 200) { showPreviousPage(); return true; } // 向左划, 下一页 if (e1.getRawX() - e2.getRawX() > 200) { showNextPage(); return true; } return super.onFling(e1, e2, velocityX, velocityY); } }); } /** * 展示下一页, 子类必须实现 */ public abstract void showNextPage(); /** * 展示上一页, 子类必须实现 */ public abstract void showPreviousPage(); // 点击下一页按钮 public void next(View view) { showNextPage(); } // 点击上一页按钮 public void previous(View view) { showPreviousPage(); } @Override public boolean onTouchEvent(MotionEvent event) { mDectector.onTouchEvent(event);// 委托手势识别器处理触摸事件 return super.onTouchEvent(event); } }
获取手机联系人
这件事的实现当然是依赖的内容提供者。
为了获取到联系人,共涉及到2张表(可以这么说),他们的内容提供者的Uri为:
- content://com.android.contacts/raw_contacts (主要从这个表获取contact_id)
- content://com.android.contacts/data (实际是view_data视图的URI)
获取代码:
Uri rawContactsUri = Uri.parse("content://com.android.contacts/raw_contacts"); Uri dataUri = Uri.parse("content://com.android.contacts/data"); //查的不是data表, 查的实际上是view_data视图 ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String,String>>(); //raw_contacts表中获取联系人信息的ID Cursor queryRawC = getContentResolver().query(rawContactsUri, new String[]{"contact_id"}, null, null, null); while( queryRawC.moveToNext() ){ String contactId = queryRawC.getString(0); Cursor dataCursor = getContentResolver().query(dataUri, new String[]{"data1", "mimetype"}, "contact_id = ?", new String[]{contactId}, null); if (dataCursor != null) { HashMap<String, String> map = new HashMap<String, String>(); while (dataCursor.moveToNext()) { String data1 = dataCursor.getString(0); String mimetype = dataCursor.getString(1); if ("vnd.android.cursor.item/phone_v2".equals(mimetype)) { map.put("phone", data1); } else if ("vnd.android.cursor.item/name".equals(mimetype)) { map.put("name", data1); } } list.add(map); dataCursor.close(); } } queryRawC.close();
应注意:
- 我们没有去查mimetype相关的表, 而是根据类型直接去判断的- ArrayList<HashMap<String, String>>可以直接用ListView的SimpleAdapter处理
SIM卡信息
可以使用TelephonyManager来获取, 例如:
TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); String simSerialNumber = tm.getSimSerialNumber();// 获取sim卡序列号
零碎
Point1
- 当我们想让用户输入号码时, 可以直接弹出号码输入框,而不是整个键盘: inputType=”phone”
Point2
- 当从一个Activity返回时, 结果码有:
- Activity.RESULT_OK:我们应手动设置这个; Activity.RESULT_CANCEL:当用户直接点解返回键是,返回的就是这个resultCode。
- 当从一个Activity返回时, 结果码有:
0 0
- Android进阶-屏幕滑动和获取手机联系人
- android手机获取联系人姓名和电话号码
- Android获取手机联系人
- Android 获取手机联系人
- Android 获取手机联系人
- Android 获取手机联系人
- android 获取手机联系人
- Android 获取手机联系人
- android 获取手机联系人
- android 获取手机联系人
- android获取手机通讯录联系人
- android 获取手机联系人信息
- android获取手机通讯录联系人
- android获取手机通讯录联系人
- android获取手机通讯录联系人
- android获取手机通讯录联系人
- android获取手机通讯录联系人
- android获取手机通讯录联系人
- [Web前端]梳理JavaScript.1.概念
- audios
- Centos7 disable ipv6
- 【图文教程】手把手教你如何安装ubuntu(Windows基础上双系统)
- JAVA分页代码
- Android进阶-屏幕滑动和获取手机联系人
- iOS开发多线程篇—GCD介绍
- ARM7的三级流水线过程
- Hbase0.98版本的安装部署配置管理(Hadoop2.3、Hbase0.98、Hive0.13整合)
- php实现文件下载
- 1008. 数组元素循环右移问题 (20)
- iOS开发 如何在Label中显示图片-图文混排
- 使用myEclipse生成自定义API文档
- Android画各种圆,饼图,环图,圆形图片