内容提供者 ContentProvide简单示例
来源:互联网 发布:微信小程序初始化数据 编辑:程序博客网 时间:2024/05/16 10:24
此示例展示了利用内容提供者获得联系人电话号码和获取图库的图片,main代码如下:
main:
package com.luo.dllo.contentprovidetest;import android.content.ContentResolver;import android.content.Intent;import android.content.res.Resources;import android.database.Cursor;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.net.Uri;import android.provider.ContactsContract;import android.provider.MediaStore;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.text.TextUtils;import android.view.View;import android.widget.Button;import android.widget.ImageView;import android.widget.Toast;import java.lang.annotation.Retention;import java.util.Date;public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button btn_phone, btn_pic; private ImageView iv; private ContentResolver cr; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn_phone = (Button) findViewById(R.id.btn_phone); btn_pic = (Button) findViewById(R.id.btn_pic);// btn_name= (Button) findViewById(R.id.btn_name); iv = (ImageView) findViewById(R.id.iv); btn_phone.setOnClickListener(this); btn_pic.setOnClickListener(this);// btn_name.setOnClickListener(this); cr = getContentResolver(); //初始化ContentResolver } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_phone: getNumber(); break; case R.id.btn_pic:// Intent intent = new Intent(Intent.ACTION_PICK);// //利用隐式intent进入图库// intent.setData(MediaStore.Images.Media.EXTERNAL_CONTENT_URI);// //将Uri通过Intent传递出去// startActivityForResult(intent, 200); getPicture(); break; } } private void getNumber() { //创建游标获取联系人信息 Cursor cursor = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null); while (cursor.moveToNext()) { //获取联系人的电话号 String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds .Phone.DATA)); String displayname = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds .Phone.DISPLAY_NAME)); Toast.makeText(MainActivity.this, number + displayname, Toast.LENGTH_SHORT).show(); } } //// @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (data != null) { //接收数据 Uri uri = data.getData(); //利用游标获取图片信息 Cursor cursor = cr.query(uri, null, null, null, null); if (cursor != null) { while (cursor.moveToNext()) { //获取图片路径的数据 String filePath = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA)); //得到图片 Bitmap bitmap = BitmapFactory.decodeFile(filePath); iv.setImageBitmap(bitmap); } } } } private Bitmap getPicture() { //利用游标对象获取电话本内容 Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); //获取联系人id列 int columnindex = cursor.getColumnIndex(ContactsContract.Contacts._ID); if (cursor != null) { while (cursor.moveToNext()) { //转化联系人Id String contactId = cursor.getString(columnindex); //获取联系人数据 Cursor cursor_phone = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + contactId, null, null); if (cursor_phone != null) { while (cursor_phone.moveToNext()) { //获取联系人头像ID String photoId = cursor_phone.getString(cursor_phone.getColumnIndex (ContactsContract.CommonDataKinds.Phone.PHOTO_ID)); //获取联系人头像数据 Cursor c = cr.query(ContactsContract.Data.CONTENT_URI, new String[]{ContactsContract.Data.DATA15}, ContactsContract.Data._ID + "=" + photoId, null, null); //一个一个遍历游标对象 c.moveToFirst(); //将数据转化成数组 byte [] photo = c.getBlob(0); if (photo != null) { //利用图片工厂将数据转化成图片 Bitmap map = BitmapFactory.decodeByteArray(photo, 0, photo.length); iv.setImageBitmap(map); c.close(); return map; } } cursor_phone.close(); } } cursor.close(); } return null; }}
布局文件如下:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <Button android:id="@+id/btn_phone" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="获取联系人电话号码" android:textSize="40sp" /> <Button android:id="@+id/btn_pic" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="获取图库图片" android:textSize="40sp" /> <ImageView android:id="@+id/iv" android:layout_width="wrap_content" android:layout_height="wrap_content" /></LinearLayout>
最后别忘了给权限
manifest文件如下:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.luo.dllo.contentprovidetest"> <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.WRITE_CONTACTS"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application></manifest>
0 0
- 内容提供者 ContentProvide简单示例
- Android之ContentProvide(内容提供者)
- Android实例demo12之contentprovide内容提供者与被提供者
- contentprovide(内容提供者)和contentparser(内容解析者)
- Android——ContentProvide 内容提供者+四大组件之三
- Android——ContentProvide 内容提供者+四大组件之三
- 内容提供者简单介绍
- 安卓SQLite和内容提供者(ContentProvide)史上最通俗和深入
- ContentProvide简单使用
- 内容提供者
- 内容提供者
- 内容提供者
- 内容提供者
- 内容提供者
- 内容提供者
- 内容提供者
- 内容提供者
- 内容提供者
- Java Web项目中Maven管理jar包,如何用命令添加ja包!
- BaiduSdk3.0之后无法使用BMapManager的问题
- MyBatis-Spring-TransactionManager
- C++多态
- 神奇的递归
- 内容提供者 ContentProvide简单示例
- 阿里系技术博客原力觉醒,首批36支梦之队亮相云栖社区!
- QT读取access是数据库表名中文乱码
- Servlet写验证码
- NYOJ1112求次数
- Java中的数组
- Spring事务之如何保证同一个Connection对象
- css的定位:
- 【Android】Mainifest文件手动添加Activity