知识库

wiki.linsakura.com

用户工具

站点工具


wiki:book:notes:android:第一行代码-android-第2版-郭霖:第7章

这是本文档旧的修订版!


第7章 跨程序共享数据——探究内容提供器

简介

内容提供器(Content Provider):在不同应用程序之间,实现数据共享的功能。允许一个程序访问另一个程序的数据,还能保证被访问数据的安全性。

运行时权限

在程序运行时申请权限

首先在MainActivity中添加call():

private void call() {
    try {
        Intent intent = new Intent(Intent.ACTION_CALL);
        intent.setData(Uri.parse("tel:10086"));
        startActivity(intent);
    } catch (SecurityException e) {
        e.printStackTrace();
    }
}

然后在按钮onClick()中添加:

if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(MainActivity.this, new String[]{ Manifest.permission.CALL_PHONE }, 1);
} else {
    call();
}

ContextCompat.checkSelfPermission()判断用户是否已经授权过,Manifest.permission.CALL_PHONE是具体的权限名。PackageManager.PERMISSION_GRANTED表示已授权。
ActivityCompat.requestPermissions()向用户申请授权。第二个参数是String数组,第三个是权限码,唯一即可。
最后在MainActivity中添加:

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    switch (requestCode) {
        case 1:
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                call();
            } else {
                Toast.makeText(this, "You denied the permission", Toast.LENGTH_SHORT).show();
            }
            break;
        default:
    }
}

访问其他程序中的数据

ContentResolver的基本用法

内容URI格式
content://com.example.app.provider/table1
解析成Uri对象

Uri uri = Uri.parse("content://com.example.app.provider/table1");

query()

Cursor cursor = getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder);

查询完后进行遍历

if (cursor != null) {
    while (cursor.moveToNext()) {
        String column1 = cursor.getString(cursor.getColumnIndex("column1"));
        int column2 = cursor.getInt(cursor.getColumnIndex("column2"));
    }
    cursor.close();
}

insert()

ContentValues values= new ContentValues();
values.put("column1", "text");
values.put("column2", 1);
getContentResolver().insert(uri, values);

update()

ContentValues values = new ContentValues();
values.put("column1", "");
getContentResolver().update(uri, values, "column1 = ? and column2 = ?", new String[]{ "text", "1" });

delete()

getContentResolver().delete(uri, "column2 = ?", new String[]{ "1" });

读取系统联系人

wiki/book/notes/android/第一行代码-android-第2版-郭霖/第7章.1649301191.txt.gz · 最后更改: 2022/04/07 11:13 由 博丽幻月