ContextCompat vs vscode中怎样用svn么用

当前位置浏览文章
假如一个 APP 用内容提供器对其数据提供了对外访问的接口,那么任何其余的 APP 都能访问这部分的数据啦,像 Android 中的电话簿、短信等程序都提供了相似的访问接口。1 ContentResolver 基础ContentResolver 中提供了一系列方法使用于对数据进行 CRUD 操作:方法说明insert()增加数据。update()升级数据。delete()删除数据。query()查询数据。这些方法用 Uri 作为参数,它被称为内容 URI,它为数据建立了唯一标识符。内容 URI 由三部分组成:协议公告 - content://authority - 用程序包名来命名,使用于区分不同的应使用程序。path - 使用于区分不同的表。一个完整内容 URI 格式为:content://&authority&/&path&得到了内容 URI 字符串后,需要调使用 Uri.parse() 方法把它解析为
对象即可以作为参数传入 ContentResolver 方法,代码如下:Uri uri = Uri.parse("content://com.deniro.app.provider/tableName");Cursor cursor = getContentResolver().query(uri,projection,selection,selectionArgs,sortOrder);1.1 查询query 方法参数说明:参数说明示例uri查询某个 APP 下的某一张表from table_nameprojection指定表列名column1,column2selection指定 where 束缚条件where column = valueselectionArgs为 selection 中的占位符提供具体的值-orderBy指定排序方式order by column1,column2查询完成后会返回一个 Cursor 对象,读取逻辑是:通过移动游标来遍历 Cursor 中的所有行,而后再取出每一行中相应列的数据,代码如下:if (cursor != null){
while (cursor.moveToNext()){
String column1 = cursor.getString(cursor.getColumnIndex("column1"));
int column2 = cursor.getInt(cursor.getColumnIndex("column2"));
cursor.close();}1.2 新添加方法定义如下: public final @Nullable Uri insert(@RequiresPermission.Write @NonNull Uri url,
@Nullable ContentValues values) 它还需要一个 ContentValues,作为需要新添加的数据。示例代码如下:ContentValues values = new ContentValues();values.put("column1","data");values.put("column2",1);getContentResolver().insert(uri, values);1.3 升级方法定义如下:public final int update(@RequiresPermission.Write @NonNull Uri uri,
@Nullable ContentValues values, @Nullable String where,
@Nullable String[] selectionArgs)除了 uri 与 ContentValues ,方法还需要 where 条件束缚的参数,来确定需要升级的数据范围。示例代码如下:ContentValues values = new ContentValues();values.put("column1","new_data");getContentResolver().update(uri, values, "column1 = ? column2 = ?",new String[]{"data","1"});1.4 删除方法定义如下:public final int delete(@RequiresPermission.Write @NonNull Uri url, @Nullable String where,
@Nullable String[] selectionArgs) 方法所需要的参数与 方法相同。示例代码如下:getContentResolver().delete(uri,
"column1 = ?", new String[]{"data"});2
读取系统联络人信息首先在模拟器中手工增加少量联络人信息,打开电话簿,点击 【ADD A CONTACT 】或者者右下角的图标按钮:第一次新添加联络人时,会弹出【能否创立在线账号使用于备份联络人信息】的选择框,这里我们选择 KEEP LOCAL:而后输入联络人的姓名与手机号码:接着,点击右上角的打勾按钮。最后,以相似的方式再增加一个联络人:联络人列表现在,我们要开始用内容提供器来读取系统联络人信息啦。布局文件:&?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:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="net.deniro.android.contactstest.MainActivity"&
android:id="@+id/contacts"
android:layout_width="match_parent"
android:layout_height="match_parent"&&/ListView&&/LinearLayout&我们把读取到的系统联络人信息放在一个 ListView 中展现。Activity:package net.deniro.android.import android.Mimport android.content.pm.PackageMimport android.database.Cimport android.os.Bimport android.provider.ContactsCimport android.support.annotation.NonNimport android.support.v4.app.ActivityCimport android.support.v4.content.ContextCimport android.support.v7.app.AppCompatAimport android.widget.ArrayAimport android.widget.ListVimport android.widget.Timport java.util.ArrayLimport java.util.Lpublic class MainActivity extends AppCompatActivity {
List&String& contacts = new ArrayList&&();
ArrayAdapter&String& adapter =
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//设置 ListView 内容
ListView contactsView = (ListView) findViewById(R.id.contacts);
adapter = new ArrayAdapter&&(this, android.R.layout.simple_list_item_1, contacts);
contactsView.setAdapter(adapter);
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
//请求读取联络人的权限
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CONTACTS}, 1);
readContacts();
private void readContacts() {
Cursor cursor =
cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
if (cursor != null) {
while (cursor.moveToNext()) {
//联络人姓名
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String mobile = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
contacts.add(name + ":" + mobile);
//通知 ListView 数据已升级
adapter.notifyDataSetChanged();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (cursor != null) {
cursor.close();
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case 1://取得权限后,读取联络人
if (grantResults.length & 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
readContacts();
Toast.makeText(this, "被拒绝", Toast.LENGTH_SHORT).show();
throw new RuntimeException("onRequestPermissionsResult");
}}这里用了 ContentResolver 的 query() 方法来查询系统联络人的数据。ContactsContract.CommonDataKinds.Phone.CONTENT_URI 封装了内容 URI 字符串;接着,从 ContactsContract.CommonDataKinds.Phone 常量中,通过 Cursor 对象遍历获取联络人的姓名与手机号;而后通知 ListView 刷新列表。由于读取系统联络人涉及到危险权限,所以这里先判断能否有权限。最后记得在 AndroidManifest.xml 中公告权限:&!--公告读取联络人权限--&&uses-permission android:name="android.permission.READ_CONTACTS"/&为了示例的简洁,没有即时刷新联络人列表,所以假如有新添加联络人,需要退出 APP 后再进入才会刷新联络人列表。运行 APP:权限申请系统联络人列表是不是很简单呀O(∩_∩)O哈哈~萌新求指教 ContextCompat.checkSelfPermission问题【android开发吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:124,928贴子:
萌新求指教 ContextCompat.checkSelfPermission问题收藏
想接个有米广告,下载了最新版本的demo 导入到eclipse上,竟然报在 ContextCompat.checkSelfPermission,ActivityCompat.requestPermissions 等几个接口(都是申请权限之类的样子)报 The method checkSelfPermission(PermissionCheckActivity, String) is undefined for the type ContextCompat,应该是找不到定义,网上搜下,好像是要API 23,然后更新了API 23 依旧报这个错,以前听同事说过,eclipse好像用权限之类的接口,还要在哪设置下,望解决方案,谢谢
android开发,快速制作iOS和安卓App,上线快,海量模块,满足您的个性化开发需求.android开发,强大的用户行为分析库,数据安全,稳定可靠.免费试用.
不用ContextCompat.checkSelfPermission,直接checkSelfPermission试试看
同问,楼主问题解决没折磨我几天了这问题。
keyi 的2楼
登录百度帐号23文章数量
5686阅读量
相关推荐文章ContextCompat.checkSelfPermission无效的问题 - 简书
ContextCompat.checkSelfPermission无效的问题
最近发现一个问题,我在使用ContextCompat.CheckSelfPermission()时无论如何开关权限返回值都是PackageManager.PERMISSION_GRANTED,而使用PackageManager.checkPermission()的时候返回值又始终都是PackageManager.PERMISSION_DENIED;经过多番尝试和查找资料发现原因:If your application is targeting an API level before 23 (Android M) then both:ContextCompat.CheckSelfPermission and Context.checkSelfPermission doesn't work and always returns 0 (PERMISSION_GRANTED). Even if you run the application on Android 6.0 (API 23). 在targetSdkVersion小于23(Android M)的时候,ContextCompat.CheckSelfPermission 和Context.checkSelfPermission方法都不能正常工作并且始终返0(PERMISSION_GRANTED),即使你的应用运行在Android6.0(API 23)的设备上。解决办法:As I said in the 1st point, if you targeting an API level before 23 on Android 6.0 then ContextCompat.CheckSelfPermission and Context.checkSelfPermission doesn't work. Fortunately you can use PermissionChecker.checkSelfPermission to check run-time permissions.
可以使用PermissionChecker.checkSelfPermission()去检查权限是否被授予。原文:
Andriod 6.0 动态权限Permission相关 推荐博文: 随着Android 6.0发布以及普及,我们开发者所要应对的主要就是新版本SDK带来的一些变化,首先关注的就是权限机制的变化。对于6.0的几个主要的变化,查看查看官网的这篇文章http://develop...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金相信有很多朋友...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金 相信有很多...
发热放入Android6.0带来了新的权限管理方式,根据提供的官方文档,再加上自己的理解,做了以下汇总仅供大家伙参考,不好勿喷。 一个新建的Android应用默认是没有权限的,这意味着它不能执行任何可能对用户体验有不利影响的操作或者访问设备数据。为了使用受保护的功能,你必须...
简述 Android是一个权限分离的操作系统,每一个应用程序运行时都会有一个明确地系统身份标识(Linux的user ID和group ID)。部分系统也同样被特定身份标识而隔开。因此,Linux才能将应用程序与其他程序和系统隔离开来。 这样的机制可以说是相当安全,但是也阻...
勤奋,这是一个励志的形容词。 遥想当年,幼时的李白也是个贪玩的淘气包,幸亏在河边遇见那位不辞劳苦的老奶奶,“只要功夫深,铁杵磨成针”,直白而深刻的劝言触动了小李白的内心,从此改变了他的习性,勤奋于读书,最终,中国文学史上多了一位伟大的浪漫主义诗仙! 其实,古今中外,有关勤奋...
11月的南方,虽然已经进入了冬天,但天气却总是不那么尽如人意。大雾,外加蒙蒙细雨,一派阴沉的气息。不过,阴沉的气息并没有遮盖住某个群体的热情和激动,他们就是被选中参加乌镇“第三届互联网大会”的志愿者们。 可能是因为近水楼台先得月吧,每年的互联网大会都会面向浙江省各大高校招募...
从一个城市来到另一个城市 从一个自己呆腻歪了的地方 去一个别人呆腻歪了的地方 白天 一样的车水马龙 夜晚 一样的灯火辉煌 却邂逅了另一片心情 离开当下的日常生活 或许就是旅行的意义
为进一步贯彻落实“两学一做”学习教育常态化制度化,东畈村第一党支部与泰美、锦辉两企业支部一道于11月19日组织所属党员参观南湖,重走红色之路。
党员们瞻仰了中共一大红船——南湖革命纪念船,参观了南湖革命纪念馆。通过对党史的再次学习、对革命先辈为共产主义事业抛头颅...在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
import android.support.v4.app.ActivityCimport android.support.v4.content.ContextC
private void requestPermission(String permission){
if(Build.VERSION.SDK_INT &= Build.VERSION_CODES.M){
if (ContextCompat.checkSelfPermission(BookListActivity.this,
Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(BookListActivity.this,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
MY_PERMISSIONS_REQUEST_READ_CONTACTS);
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
android-support-v4.jar 是什么版本的checkSelfPermission方法在23.0.0及后续版本中才有
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。

我要回帖

更多关于 vs中使用git 的文章

 

随机推荐