zoukankan      html  css  js  c++  java
  • BaseActivity

    package com.glandroid.smssender;
    
    import android.content.DialogInterface;
    import android.content.pm.PackageManager;
    import android.os.Build;
    import android.support.annotation.NonNull;
    import android.support.v4.app.ActivityCompat;
    import android.support.v7.app.AlertDialog;
    import android.support.v7.app.AppCompatActivity;
    import android.widget.Toast;
    
    /**
    * @author Admin
    * @version $Rev$
    * @des ${TODO}
    * @updateAuthor $Author$
    * @updateDes ${TODO}
    */
    public class BaseActivity extends AppCompatActivity {
    //**************** Android M Permission (Android 6.0权限控制代码封装)
    private int permissionRequestCode = 88;
    private PermissionCallback permissionRunnable;
    
    public interface PermissionCallback {
    void hasPermission();
    
    void noPermission();
    }
    
    /**
    * Android M运行时权限请求封装
    *
    * @param permissionDes 权限描述
    * @param runnable 请求权限回调
    * @param permissions 请求的权限(数组类型),直接从Manifest中读取相应的值,比如Manifest.permission.WRITE_CONTACTS
    */
    public void performCodeWithPermission(@NonNull String permissionDes, PermissionCallback runnable, @NonNull String... permissions) {
    if (permissions == null || permissions.length == 0)
    return;
    // this.permissionrequestCode = requestCode;
    this.permissionRunnable = runnable;
    if ((Build.VERSION.SDK_INT < Build.VERSION_CODES.M) || checkPermissionGranted(permissions)) {
    if (permissionRunnable != null) {
    permissionRunnable.hasPermission();
    permissionRunnable = null;
    }
    } else {
    //permission has not been granted.
    requestPermission(permissionDes, permissionRequestCode, permissions);
    }
    
    }
    
    private boolean checkPermissionGranted(String[] permissions) {
    boolean flag = true;
    for (String p : permissions) {
    if (ActivityCompat.checkSelfPermission(this, p) != PackageManager.PERMISSION_GRANTED) {
    flag = false;
    break;
    }
    }
    return flag;
    }
    
    private void requestPermission(String permissionDes, final int requestCode, final String[] permissions) {
    if (shouldShowRequestPermissionRationale(permissions)) {
    /*1. 第一次请求权限时,用户拒绝了,下一次:shouldShowRequestPermissionRationale() 返回 true,应该显示一些为什么需要这个权限的说明
    2.第二次请求权限时,用户拒绝了,并选择了“不在提醒”的选项时:shouldShowRequestPermissionRationale() 返回 false
    3. 设备的策略禁止当前应用获取这个权限的授权:shouldShowRequestPermissionRationale() 返回 false*/
    // Provide an additional rationale to the user if the permission was not granted
    // and the user would benefit from additional context for the use of the permission.
    // For example, if the request has been denied previously.
    
    // Snackbar.make(getWindow().getDecorView(), requestName,
    // Snackbar.LENGTH_INDEFINITE)
    // .setAction(R.string.common_ok, new View.OnClickListener() {
    // @Override
    // public void onClick(View view) {
    // ActivityCompat.requestPermissions(BaseAppCompatActivity.this,
    // permissions,
    // requestCode);
    // }
    // })
    // .show();
    //如果用户之前拒绝过此权限,再提示一次准备授权相关权限
    new AlertDialog.Builder(this)
    .setTitle("提示")
    .setMessage(permissionDes)
    .setPositiveButton("授权", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
    ActivityCompat.requestPermissions(BaseActivity.this, permissions, requestCode);
    }
    }).show();
    
    } else {
    // Contact permissions have not been granted yet. Request them directly.
    ActivityCompat.requestPermissions(BaseActivity.this, permissions, requestCode);
    }
    }
    
    private boolean shouldShowRequestPermissionRationale(String[] permissions) {
    boolean flag = false;
    for (String p : permissions) {
    if (ActivityCompat.shouldShowRequestPermissionRationale(this, p)) {
    flag = true;
    break;
    }
    }
    return flag;
    }
    
    /**
    * Callback received when a permissions request has been completed.
    */
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
    @NonNull int[] grantResults) {
    if (requestCode == permissionRequestCode) {
    if (verifyPermissions(grantResults)) {
    if (permissionRunnable != null) {
    permissionRunnable.hasPermission();
    permissionRunnable = null;
    }
    } else {
    Toast.makeText(this, "暂无权限执行相关操作!", Toast.LENGTH_SHORT).show();
    if (permissionRunnable != null) {
    permissionRunnable.noPermission();
    permissionRunnable = null;
    }
    }
    } else {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }
    
    }
    
    public boolean verifyPermissions(int[] grantResults) {
    // At least one result must be checked.
    if (grantResults.length < 1) {
    return false;
    }
    
    // Verify that each required permission has been granted, otherwise return false.
    for (int result : grantResults) {
    if (result != PackageManager.PERMISSION_GRANTED) {
    return false;
    }
    }
    return true;
    }
    //********************** END Android M Permission ****************************************
    }

    调用:

         performCodeWithPermission("发送短信权限", new PermissionCallback() {
                    @Override
                    public void hasPermission() {
                        SmsManager smsManager = SmsManager.getDefault();
                        smsManager.sendTextMessage(phoneNumber, null, message, null, null);
                    }
    
                    @Override
                    public void noPermission() {
    
                    }
                }, Manifest.permission.SEND_SMS);
  • 相关阅读:
    android29
    android28
    android27
    android26
    Dynamics CRM2011 MspInstallAction failed when installing an Update Rollup
    Dynamics CRM Import Solution Attribute Display Name description is null or empty
    The service cannot be activated because it does not support ASP.NET compatibility
    IIS部署WCF报 无法读取配置节“protocolMapping”,因为它缺少节声明
    Unable to access the IIS metabase.You do not have sufficient privilege
    LM算法与非线性最小二乘问题
  • 原文地址:https://www.cnblogs.com/xiaofu007/p/10562512.html
Copyright © 2011-2022 走看看