googlesamples/easypermissions使用学习
andorid 6.0权限介绍
关于andorid 6.0权限介绍,可参考:
< Android 6.0 动态权限>
googlesamples/easypermissions github地址
https://github.com/googlesamples/easypermissions
阅读注释:
https://github.com/xiaxveliang/Android_ThirdCode_easypermissions
googlesamples/easypermissions 使用学习
build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 25
buildToolsVersion '25.0.3'
defaultConfig {
applicationId "com.xiaxl.xxxxxx"
minSdkVersion 15
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
//
compile 'com.android.support:recyclerview-v7:25.3.1'
compile 'com.android.support:support-v4:25.3.1'
compile 'com.android.support:design:25.3.1'
// easypermissions
compile 'pub.devrel:easypermissions:1.0.0'
}
MainActivity.java
public class MainActivity extends AppCompatActivity implements EasyPermissions.PermissionCallbacks {
private static final String TAG = "MainActivity";
/**
*
*/
private static final int RC_CAMERA_PERM = 123;
private static final int RC_LOCATION_CONTACTS_PERM = 124;
/**
*
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 摄像机 权限
findViewById(R.id.button_camera).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
cameraTask();
}
});
// 位置、联系人 权限
findViewById(R.id.button_location_and_contacts).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
locationAndContactsTask();
}
});
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
// 权限返回,走到这里
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
}
// ########################################摄像机权限##################################################
/**
* 摄像机权限
*/
@AfterPermissionGranted(RC_CAMERA_PERM)
public void cameraTask() {
// 判断是否有摄像机权限
if (EasyPermissions.hasPermissions(this, Manifest.permission.CAMERA)) {
// 有摄像机权限
Toast.makeText(this, "TODO: Camera things", Toast.LENGTH_LONG).show();
} else {
// 请求摄像机权限
//第二个参数是 被拒绝后再次申请该权限的解释
//第三个参数是 请求码
//第四个参数是 要申请的权限
EasyPermissions.requestPermissions(this,
getString(R.string.rationale_camera),
RC_CAMERA_PERM,
Manifest.permission.CAMERA);
}
}
// ###########################################位置和联系人权限###############################################
private static final String[] LOCATION_AND_CONTACTS =
{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.READ_CONTACTS};
/**
* 位置和联系人权限
*/
@AfterPermissionGranted(RC_LOCATION_CONTACTS_PERM)
public void locationAndContactsTask() {
// 位置 和 联系人权限
if (EasyPermissions.hasPermissions(this, LOCATION_AND_CONTACTS)) {
Toast.makeText(this, "TODO: Location and Contacts things", Toast.LENGTH_LONG).show();
} else {
// 请求位置 和 联系人权限
//第二个参数是 被拒绝后再次申请该权限的解释
//第三个参数是 请求码
//第四个参数是 要申请的权限
EasyPermissions.requestPermissions(
this,
getString(R.string.rationale_location_contacts),
RC_LOCATION_CONTACTS_PERM,
LOCATION_AND_CONTACTS);
}
}
// ############################################权限是否授予##############################################
@Override
public void onPermissionsGranted(int requestCode, List<String> perms) {
Log.d("xiaxl: ", "onPermissionsGranted:" + requestCode + ":" + perms.size());
}
@Override
public void onPermissionsDenied(int requestCode, List<String> perms) {
Log.d("xiaxl: ", "onPermissionsDenied:" + requestCode + ":" + perms.size());
Log.d("xiaxl: ", "perms: " + perms);
// 点击 权限弹窗上 "不再询问"按钮后,要求进入设置页面,开启权限
// (Optional) Check whether the user denied any permissions and checked "NEVER ASK AGAIN."
// This will display a dialog directing them to enable the permission in app settings.
if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) {
new AppSettingsDialog.Builder(this).build().show();
}
}
// ##########################################设置中返回后################################################
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.e("xiaxl: ", "onActivityResult: " + resultCode);
// 设置返回后,判断权限的获取情况
if (requestCode == AppSettingsDialog.DEFAULT_SETTINGS_REQ_CODE) {
String yes = getString(R.string.yes);
String no = getString(R.string.no);
// Do something after user returned from app settings screen, like showing a Toast.
Toast.makeText(
this,
getString(R.string.returned_from_app_settings_to_activity,
hasCameraPermission() ? yes : no,
hasLocationAndContactsPermissions() ? yes : no,
hasSmsPermission() ? yes : no),
Toast.LENGTH_LONG)
.show();
}
}
// ##########################################################################################
private boolean hasCameraPermission() {
return EasyPermissions.hasPermissions(this, Manifest.permission.CAMERA);
}
private boolean hasLocationAndContactsPermissions() {
return EasyPermissions.hasPermissions(this, LOCATION_AND_CONTACTS);
}
private boolean hasSmsPermission() {
return EasyPermissions.hasPermissions(this, Manifest.permission.READ_SMS);
}
}
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.xiaxl.expandable">
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.READ_SMS" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name="com.xiaxl.xxxxxx.MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
MainFragment
public class MainFragment extends Fragment implements EasyPermissions.PermissionCallbacks {
private static final String TAG = "MainFragment";
private static final int RC_SMS_PERM = 122;
@Override
public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
// Create view
View v = inflater.inflate(R.layout.fragment_main, container);
// Button click listener
v.findViewById(R.id.button_sms).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
smsTask();
}
});
return v;
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
// EasyPermissions handles the request result.
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
}
// #######################################请求message##############################################
@AfterPermissionGranted(RC_SMS_PERM)
private void smsTask() {
if (EasyPermissions.hasPermissions(getContext(), Manifest.permission.READ_SMS)) {
// Have permission, do the thing!
Toast.makeText(getActivity(), "TODO: SMS things", Toast.LENGTH_LONG).show();
} else {
// Request one permission
EasyPermissions.requestPermissions(this, getString(R.string.rationale_sms),
RC_SMS_PERM, Manifest.permission.READ_SMS);
}
}
// #####################################################################################
@Override
public void onPermissionsGranted(int requestCode, List<String> perms) {
Log.d(TAG, "onPermissionsGranted:" + requestCode + ":" + perms.size());
}
@Override
public void onPermissionsDenied(int requestCode, List<String> perms) {
Log.d(TAG, "onPermissionsDenied:" + requestCode + ":" + perms.size());
}
}