手游传奇发布网站999,互联网公司图片,网页设计与制作教程知识点,万户oa系统目录
一、ContentResolver基本用法 如何查询#xff1f; 如何向表中添加一条数据#xff1f; 如何更新这条新添加的数据#xff1f; 如何删除这条数据#xff1f;
二、读取系统联系人 要想你的APP访问其他应用程序的数据#xff0c;需要使用内容提供器#xff0c;下面使…目录
一、ContentResolver基本用法 如何查询 如何向表中添加一条数据 如何更新这条新添加的数据 如何删除这条数据
二、读取系统联系人 要想你的APP访问其他应用程序的数据需要使用内容提供器下面使用现有的内容提供器来读取和操作相应程序中的数据。 一、ContentResolver基本用法 如果想要访问内容提供器中共享的数据需要借助ContentResolver类其提供了一系列方法用于对数据CRUD操作。 ContentResolver中的增删改查方法接收一个Uri参数这个参数称为内容URI为内容提供器中的数据建立了唯一的标识符主要由两部分组成authority和path。authority用于对不同的应用程序做区分一般采用程序包名path用于对同一应用程序中不同的表做区分如某个程序的数据库里存在一张表table1这时的内容URI就是com.example.app.provider/table1标准格式是content://com.example.app.provider/table1。 得到内容URI字符串后将它解析称URI对象才可以作为参数传入方法如下
Uri uri Uri.parse(content://com.example.app.provider/table1) 只需要调用Uri.parse()方法就可以将内容URI字符串解析成Uri对象了。 现在可以使用这个Uri对象来查询table1表中的数据了代码如下
Cursor cursor getContentResolver().query(uri,projection,selection,selectionArgs,sortOrder
); 下表对使用的参数作了详细的解释 如何查询 查询完之后仍然是一个Cursor对象读取的思路仍然是遍历Cursor的所有行再取出每一行中相应列的数据代码如下 if(cursor!null){while (cursor.moveToNext()){String column1 cursor.getString(cursor.getColumnIndex(column1));int cloumn2 cursor.getInt(cursor.getColumnIndex(column2));}cursor.close();} 如何向表中添加一条数据
代码如下
ContentValues values new ContentValues();
values.put(column1,text);
values.put(column2,1);
getContentResolver().insert(uri,values); 如何更新这条新添加的数据
代码如下
ContentValues values new ContentValues();
values.put(column1,);
getContentResolver().update(uri,values,column1? and column2 ?,new String[] {text,1}); 如何删除这条数据
代码如下
getContentResolver().delete(uri,column2 ?,new String[] { 1 }); 下面通过读取系统联系人来实践一下。 二、读取系统联系人 首先在模拟器里手动添加几个联系人 然后新建一个ContactsTest项目。
修改activity_main.xml代码如下
?xml version1.0 encodingutf-8?
LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:orientationverticalandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentListViewandroid:idid/contacts_viewandroid:layout_widthmatch_parentandroid:layout_heightmatch_parent//LinearLayout 修改MainActivity代码如下 因为READ_CONTACTS属于危险权限首先处理运行时权限用户授权之后调用readContacts()方法来读取联系人信息。 readContacts()方法使用了ContentResolver的query()方法不过传入的Uri和前面不一样这是因为ContactsContract.CommonDataKinds.Phone类已经做好了封装提供了一个CONTENT_URI常量这个常量就是解析出来的结果。接着将姓名和手机号逐一取出其各有对应的常量。 public class MainActivity extends AppCompatActivity {ArrayAdapterString adapter;ListString contactsList new ArrayList();Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ListView contactsView (ListView) findViewById(R.id.contacts_view);adapter new ArrayAdapterString(this, android.R.layout.simple_list_item_1,contactsList);contactsView.setAdapter(adapter);if(ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) ! PackageManager.PERMISSION_GRANTED){ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.READ_CONTACTS},1);}else{readContacts();}}private void readContacts(){Cursor cursor null;try {
// 查询联系人数据cursor getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,null,null,null);if(cursor ! null){while (cursor.moveToNext()){
// 获取联系人姓名String displayName cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
// 获取联系人手机号String number cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));contactsList.add(displayName \n number);}adapter.notifyDataSetChanged();}}catch (Exception e){e.printStackTrace();}finally {if(cursor ! null){cursor.close();}}}public void onRequestPermissionResult(int requestCode,String[] permissions,int[] grantResults){switch (requestCode){case 1:if(grantResults.length 0 grantResults[0] PackageManager.PERMISSION_GRANTED){readContacts();}else{Toast.makeText(this, 你拒绝了权限申请, Toast.LENGTH_SHORT).show();}break;default:}}
} 最后需要声明读取系统联系人的权限修改AndroidManifest.xml文件代码如下
?xml version1.0 encodingutf-8?
manifest xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:toolshttp://schemas.android.com/toolspackagecom.example.contactstestuses-permission android:nameandroid.permission.READ_CONTACTS/...............
效果如下