Android Studio 的 AndroidManiFest.xml
文件可以说是整个工程的指挥者了,可以在里面实现初始页面的设定,为每个页面定义Action,Title …..。例外最主要的还有一个添加权限的功能了。但是这个权限的添加就不想前面的定义那么简单了。
所谓的权限的获取,首先需要在AndroidManiFest.xml
文件中添加一条相应的权限获取的语句,例如:
.permission.PERMISSIONNAME”/>
但是,有的权限并不是这样子就能够直接获取的,例如获取手机联系人的信息的话,在上述操作的基础上还需要在相应的Activity里面进行动态的获取权限。
当时刚开始接触的时候有点混乱,后来听了这样一段解释:在 AndroidManiFest.xml 里面写的那些权限呢,实际上是你随后可能需要用到的所有的权限的一个集合,就像你在手机上安装一个app的时候,它会跳出一个界面,说安装这个app需要获取那些权限,实际上这时候并没有真正意义上的获取到这些权限。在安装完成之后,我们开始使用这个app,这时候你触发了某个action,跳出了一个对话框,说“需要获取你XXX权限”,对话框下面通常都带有两个选项“允许”,“拒绝”。这就相当于一个动态获取权限的过程,如果你允许了,那这个app此时也就获取了这个权限,如果你拒绝了,那app获取不了权限,你也理所应当的使用不了这个功能了。
1.1 在AndroidManiFest.xml 中添加相关权限
.permission.READ_CONTACTS”/>
1.2 基于上述获取联系人权限的例子,在 MainActivity.java 中,查看当前是否获取有关权限
1.2.1. 实现getContactPermission()方法,查看当前是否获取到权限,如果获得则返回true以便于下一步操作,如果没有获取则使用ActivityCompat.requestPermissions来获取权限。
Private boolean getContactPermission(){
Int back = ContextCompat.checkSelfPermission(getApplicationContext(),
ManiFest.permission.READ_CONTACTS);
//查看是否获取到相关权限
If(back != PackageManager.PERMISSION_GRANTED){ //如果没有获取到权限
ActivityCompat.requestPermission(ActivityName.this,new String[]{Manifest.permission.READ_CONTACTS},10000);
/*向系统获取权限,10000是请求码,以便于下面进行验证时,区别不同的权限请求*/
return false;
/*当前整个方法的作用是检查当前是否已经获得权限,所以这里只是申请了权限,但是并不知道到底能不能获取成功,所以返回 false ,并且需要实现OnRequestPermissionResult()来再次验证此次的获取结果并进行下一步操作。*/
}
return ture;
}
1.2.2 实现OnRequestPermissionResult()方法,用来监听getContactPermission()方法中用ActivityCompat.requestPermissions获取权限的结果。
上述两点的相关代码:
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if(requestCode == 10000){
/*判断当前是否在验证请求码为1000的请求,及READ_CONTACTS权限请求*/
if(grantResults == null || grantResults.length == 0 || grantResults[0] != PackageManager.PERMISSION_GRANTED){
Toast.makeText(getApplicationContext(),"对不起,用户不允许",Toast.LENGTH_SHORT).show();
}else{
Operation();
//上述getContactPermission()返回true时执行的操作
}
}
}
import android.Manifest;
import android.content.ContentResolver;
import android.content.DialogInterface;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.net.Uri;
import android.provider.ContactsContract;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ContactsList extends AppCompatActivity {
ContentResolver resolver ;
Uri contactUri = ContactsContract.Contacts.CONTENT_URI; //手机联系人
Uri phone = ContactsContract.CommonDataKinds.Phone.CONTENT_URI; //联系人号码
//权限获取
public boolean getPermission(){
if(ContextCompat.checkSelfPermission(ContactsList.this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(ContactsList.this, new String[]{Manifest.permission.READ_CONTACTS}, 1001);
return false;
}
return true;
}
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if(requestCode == 1001)
if(grantResults[0] == PackageManager.PERMISSION_GRANTED)
doOperation();
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
resolver = getContentResolver();
setContentView(R.layout.activity_contacts_list);
if(getPermission())
doOperation();
}
public void doOperation(){
Cursor cur = this.resolver.query(contactUri , null ,null ,null , null ,null);
final List