android6.0之后的危险权限
![1381514173164_.pic_hd](/Users/zhaoting/Library/Containers/com.tencent.xinWeChat/Data/Library/Application Support/com.tencent.xinWeChat/2.0b4.0.9/a017fbcbbfb89943c01d8bbc6ae78abc/Message/MessageTemp/a017fbcbbfb89943c01d8bbc6ae78abc/Image/1381514173164_.pic_hd.jpg)
判断是否有权限的时候,可以不用判断版本,貌似自己就已经进行判断了。
ACTION_CALL:打电话功能,需要在android 6.0以上申请权限
ACTION_DIAL:进入拨号键盘功能,即使是android6.0以上也不需要申请
若应用被赋予了某个权限组中的一个权限,那么该组中的其他权限将被自动获取。
关于内容提供器
内容URI给内容提供器中的数据建立了唯一标识符,它主要由两部分组成:authority和path。authority是用于对不同的应用程序做区分的,一般为了避免冲突,都会采用程序包名的方式来命名。比如某个程序的包名是com.example.app,那么该程序对应的authority就可以命名为com.example.app.provider。path则是用于对同一应用程序中不同的表做区分的,通常都会添加到authority的后面。比如某个程序的数据库里存在两张表:table1和table2,这时就可以将path分别命名为/table1和/table2,然后把authority和path进行组合,内容URI就变成了com.example.app.provider/table和com.example.app.provider/table2。但是内容的URI还需要加上协议声明,因此,内容URI最标准的格式写法为“content://com.example.app.provider/table1”和“content://com.example.app/provider/table2”
查询
/** * uri:指定查询某个应用程序下的某一张表 * projection:指定查询的列名 * selection:指定where的约束条件 * selectionArgs:为where中的占位符提供具体的值 * orderBy:指定查询结果的排序方式 **/ Cursor cursor=getContentResolver().query(uri,projection,selection,selectionArgs,sortOrder);
添加
/** * 使用uri参数来确定要添加到的表,待添加的数据保存在values参数中。添加完成后,返回一个勇于表 * 示这条新纪录的URI **/ ContentValues values=new ContentValues(); values.put("column1","text"); values.put("column2",1); getContentResolver().insert(uri,values);
更新
/** * 更新内容提供器中已有的数据,使用uri参数来确定更新哪一张表中的数据,新数据保存在values参数 * 中,selection和selectionArgs参数用于约束更新哪些行,受影响的行数将作为返回值返回。 **/ ContentValues values=new ContentValues(); values.put("column1",""); getContentResolver().update(uri,values,"column1=? and column2=?",new String[]{"text","1"});
删除
/** * 从内容提供器中删除数据。使用uri参数来确定删除哪一张表中的数据,selection和selectionArgs参数用于约束删除哪些行,被删除的行数将作为返回值返回。 **/ getContentValues().delete(uri,"column2=?",new String[]{"1"});
创建内容提供器
public class MyProvider extends ContentProvider { /** * 初始化内容提供器的时候调用。通常会在这里完成对数据库的创建和升级等操作,返回true表示内容 * 提供器初始化成功,返回false则表示失败。 **/ @Override public boolean onCreate() { return false; } /** * 从内容提供器中查询数据。使用uri参数来确定查询哪张表,projection参数用于确定查询哪些列,selection和selectionArgs参数用于约束查询哪些行,sortOrder参数用于对结果进行排序,查询的结果存放在Cursor对象中返回。 **/ @Nullable @Override public Cursor query(@NonNull Uri uri, @Nullable String[] strings, @Nullable String s, @Nullable String[] strings1, @Nullable String s1) { return null; } /** * 根据传入的内容URI来返回相应的MIME类型。 * 是所有的内容提供器都必须提供的一个方法,用于获取Uri对象所对应的MIME类型。 **/ @Nullable @Override public String getType(@NonNull Uri uri) { return null; } /** * 向内容提供器中添加一条数据。使用uri参数来确定要添加到的表,待添加的数据保存在values参数 * 中。添加完成后,返回一个用于表示这条新纪录的URI。 **/ @Nullable @Override public Uri insert(@NonNull Uri uri, @Nullable ContentValues contentValues) { return null; } /** * 从内容提供器中删除数据。使用uri参数来确定删除哪一张表中的数据,selection和 * selectionArgs参数用于约束删除哪些行,被删除的行数将作为返回值返回。 **/ @Override public int delete(@NonNull Uri uri, @Nullable String s, @Nullable String[] strings) { return 0; } /** * 更新内容提供器中已有的数据。使用uri参数来确定更新哪一张表中的数据,新数据保存在values参 * 数中,selection和selectionArgs参数用于约束更新哪些行,受影响的行数将作为返回值返回。 **/ @Override public int update(@NonNull Uri uri, @Nullable ContentValues contentValues, @Nullable String s, @Nullable String[] strings) { return 0; } }
标准的内容URI的写法
content://com.example.app.provider/table1
表示调用方期望访问的是com.example.app这个应用的table1表中的数据。
content://com.example.app.provider/table1/id
表示调用方期望访问的是com.example.app这个应用的table1表中id为1的数据
我们可以使用通配符的方式来分别匹配这两种格式的内容URI,规则如下。
“*”:表示匹配任意长度的任意字符
“#”:表示匹配任意长度的数字
所以,一个能够匹配任意表的内容URI格式就可以写成
content://com.example.app.provider/*
- 一个能够匹配table1表中任意一行数据的内容URI格式就可以写成
content://com.example.app.provider/table1/#
UriMatcher中提供了一个addURI( )方法,这个方法接收3个参数,可以分别把authority、path和一个自定义代码穿进去。这样,当调用UriMatcher的match( )方法时,就可以将一个Uri对象传入,返回值是某个能够匹配这个Uri对象所对应的自定义代码,利用这个代码,我们就可以判断出调用方期望访问的是哪张表中的数据了。
一个内容URI所对应的MIME字符串主要由3部分组成,Android对这3个部分做了如下格式规定。
- 必须以vnd开头
- 如果内容URI以路径结尾,则后接android.cursor.dir/,如果内容以id结尾,则后接android.cursor.item/。
- 最后接上vnd..。
- 所以对于content://com.example.app.provider/table1这个内容URI,它所对应的MIME类型就可以写成:vnd.android.cursor.dir/vnd.com.example.app.provider.table1
- 对于content://com.example.app.provider/table1/1这个内容URI,它所对应的MIME类型就可以写成:vnd.android.cursor.item/vnd.com.example.app.provider.table1
笔记——内容提供器
猜你喜欢
转载自blog.csdn.net/ting1406525501/article/details/78981392
今日推荐
周排行