新人上路,请多包涵!
之前有大佬说,学习编程要有写博客和笔记的习惯,然后近期正在学习Android开发知识,本文章转载于《第一行代码》,旨在自己学习,巩固所学的知识,也让自己在后面方便复习。
第一次发文章,还是有点小紧张ing
博客知识点:
1、在AndroidManifest.xml中申请系统权限
Android中的危险权限:共9组24个(见截图),本文用了第三组的READ_CONTACTS权限
2、通过ContentResover访问其它程序中的数据:访问联系人中的电话号码(demo)
3、首次申请权限,弹出请求
1)MainActivity.java类中的源码
package com.example.contentresover;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.Manifest;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private List<String> contactList = new ArrayList();
private ArrayAdapter<String> adapter;
private static final String TAG = "zzh666";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView contactView = findViewById(R.id.contact_view);
adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,contactList);//new一个适配器,第一个参数:上下文,第二个参数:list单项,使用的是系统提供的,第三个参数,list全项
contactView.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;
//tips:选中代码,通过按Ctrl+Shift+T可以添加异常捕获,if else等
try {
//查看源码:ContactContract.CommonDataKinds.Phone.CONTENT_URI
cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,null,null,null);
if(cursor != null){
Log.e(TAG, "readContacts: cursor not null");
while(cursor.moveToNext()){
//读联系人姓名
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
//读联系人手机号码
String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
contactList.add(name+ "\n"+number);
}
}
//注:更新适配器
adapter.notifyDataSetChanged();
} catch (Exception e) {
e.printStackTrace();
} finally {
if(cursor != null){
//游标需要关闭
cursor.close();
}
}
}
/**
* Callback for the result from requesting permissions. This method
* is invoked for every call on {@link #requestPermissions(String[], int)}.
* <p>
* <strong>Note:</strong> It is possible that the permissions request interaction
* with the user is interrupted. In this case you will receive empty permissions
* and results arrays which should be treated as a cancellation.
* </p>
*
* @param requestCode The request code passed in {@link #requestPermissions(String[], int)}.
* @param permissions The requested permissions. Never null.
* @param grantResults The grant results for the corresponding permissions
* which is either {@link PackageManager#PERMISSION_GRANTED}
* or {@link PackageManager#PERMISSION_DENIED}. Never null.
* @see #requestPermissions(String[], int)
*/
@Override
public void onRequestPermissionsResult(int requestCode,String[] permissions,int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
Log.e(TAG, "onRequestPermissionsResult: 请求权限的方法被调用了" );
Log.e(TAG, "onRequestPermissionsResult: "+requestCode);
switch(requestCode){
case 1:
if(grantResults.length>0 && grantResults[0]==PackageManager.PERMISSION_GRANTED){
readContacts();
}else{
Toast.makeText(this,"You denied the Permision!",Toast.LENGTH_LONG).show();
}
break;
default:
}
}
}
2)布局文件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"
tools:context=".MainActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="40dp"
android:text="Hello Google!"
/>
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/contact_view"/>
</LinearLayout>
3)对应的AndroidManifest.xml文件,(也叫说明书)
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.contentresover">
<!--在注册表中(说明书)申请权限-->
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
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>
本文章知识点都是《第一行代码》的,如果有不当之处,请联系删除,写博客是为了加深学习印象,感谢!