内容提供者 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
原创粉丝点击