读取手机的联系人
- MainActivity类
package com.example.edu.contactstest;
import android.app.Activity;
import android.database.Cursor;
import android.provider.ContactsContract;
import android.os.Bundle;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends Activity {
ListView contentsView;
ArrayAdapter<String> adapter;
List<String> contentList=new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
contentsView=(ListView) findViewById(R.id.contents_view);
adapter=new ArrayAdapter<>(this,android.R.layout.simple_list_item_1
,contentList);
contentsView.setAdapter(adapter);
readContacts();
}
public void readContacts() {
Cursor cursor=null;
try{
cursor=getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI
,null,null,null,null);
Log.i("tag",cursor.toString()+"============================");
while(cursor.moveToNext()){
String displayname=cursor.getString(cursor.getColumnIndex(
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME
));
String number=cursor.getString(cursor.getColumnIndex(
ContactsContract.CommonDataKinds.Phone.NUMBER
));
contentList.add(displayname+"\n"+number);
Log.i("TAG", "readContacts: "+displayname+number);
}
}catch (Exception e){
e.printStackTrace();
}finally {
if(cursor!=null)
cursor.close();
}
}
}
2.manifests清单文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.edu.contactstest">
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
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>
3 .activity_main.xml文件
<?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"
>
<ListView
android:id="@+id/contents_view"
android:layout_width="match_parent"
android:layout_height="match_parent">
</ListView>
</LinearLayout>
4.注意事项: 我的是android studio2.0 sdk是6.0的。不要用goole自带的模拟器运行,会出现错误,但是我在我的真实手机上可以运行读取我手机上的联系人信息
04-26 15:43:15.362 1621-1661/system_process E/KernelUidCpuTimeReader: failed to remove uid from uid_cputime module
java.io.FileNotFoundException: /proc/uid_cputime/remove_uid_range: open failed: ENOENT (No such file or directory)
at libcore.io.IoBridge.open(IoBridge.java:452)
at java.io.FileOutputStream.<init>(FileOutputStream.java:87)
at java.io.FileOutputStream.<init>(FileOutputStream.java:72)
at java.io.FileWriter.<init>(FileWriter.java:80)
at com.android.internal.os.KernelUidCpuTimeReader.removeUid(KernelUidCpuTimeReader.java:157)
at com.android.internal.os.BatteryStatsImpl.removeUidStatsLocked(BatteryStatsImpl.java:8800)
at com.android.server.am.BatteryStatsService.removeUid(BatteryStatsService.java:242)
at com.android.server.am.ActivityManagerService.broadcastIntentLocked(ActivityManagerService.java:16562)
at com.android.server.am.ActivityManagerService.broadcastIntent(ActivityManagerService.java:16938)
at com.android.server.pm.PackageManagerService$8.run(PackageManagerService.java:9423)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.os.HandlerThread.run(HandlerThread.java:61)
at com.android.server.ServiceThread.run(ServiceThread.java:46)
Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory)
at libcore.io.Posix.open(Native Method)
at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
at libcore.io.IoBridge.open(IoBridge.java:438)
at java.io.FileOutputStream.<init>(FileOutputStream.java:87)?
at java.io.FileOutputStream.<init>(FileOutputStream.java:72)?
at java.io.FileWriter.<init>(FileWriter.java:80)?
at com.android.internal.os.KernelUidCpuTimeReader.removeUid(KernelUidCpuTimeReader.java:157)?
at com.android.internal.os.BatteryStatsImpl.removeUidStatsLocked(BatteryStatsImpl.java:8800)?
at com.android.server.am.BatteryStatsService.removeUid(BatteryStatsService.java:242)?
at com.android.server.am.ActivityManagerService.broadcastIntentLocked(ActivityManagerService.java:16562)?
at com.android.server.am.ActivityManagerService.broadcastIntent(ActivityManagerService.java:16938)?
at com.android.server.pm.PackageManagerService$8.run(PackageManagerService.java:9423)?
at android.os.Handler.handleCallback(Handler.java:739)?
at android.os.Handler.dispatchMessage(Handler.java:95)?
at android.os.Looper.loop(Looper.java:148)?
at android.os.HandlerThread.run(HandlerThread.java:61)?
at com.android.server.ServiceThread.run(ServiceThread.java:46)?
04-26 15:43:15.379 3571-3582/com.android.systemui I/art: Background partial concurrent mark sweep GC freed 4632(275KB) AllocSpace objects, 0(0B) LOS objects, 30% free, 9MB/13MB, paused 16.425ms total 117.055ms