android权限请求

来源:互联网 发布:罗伯托.贝尼尼 知乎 编辑:程序博客网 时间:2024/04/29 02:03
import android.Manifest;import android.content.DialogInterface;import android.content.Intent;import android.content.pm.PackageManager;import android.net.Uri;import android.os.Build;import android.os.Bundle;import android.provider.Settings;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.util.Log;import java.util.ArrayList;import java.util.List;/** * Created by ws on 2016-11-26. */public class BaseActivity extends AppCompatActivity {    private final String TAG = "BaseActivity";    private int REQUEST_CODE_PERMISSION = 0x00099;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_base);    }    /**     * 请求权限     *     * @param permissions 请求的权限     * @param requestCode 请求权限的请求码     */    public void requestPermission(String[] permissions, int requestCode) {        this.REQUEST_CODE_PERMISSION = requestCode;        if (checkPermissions(permissions)) {            permissionSuccess(REQUEST_CODE_PERMISSION);        } else {            List<String> needPermissions = getDeniedPermissions(permissions);            ActivityCompat.requestPermissions(this, needPermissions.toArray(new String[needPermissions.size()]), REQUEST_CODE_PERMISSION);        }    }    /**     * 检测所有的权限是否都已授权     *     * @param permissions     * @return     */    public boolean checkPermissions(String[] permissions) {        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {            return true;        }        for (String permission : permissions) {            if (ContextCompat.checkSelfPermission(this, permission) !=                    PackageManager.PERMISSION_GRANTED) {                return false;            }        }        return true;    }    /**     * 获取权限集中需要申请权限的列表     *     * @param permissions     * @return     */    private List<String> getDeniedPermissions(String[] permissions) {        List<String> needRequestPermissionList = new ArrayList<>();        for (String permission : permissions) {            if (ContextCompat.checkSelfPermission(this, permission) !=                    PackageManager.PERMISSION_GRANTED ||                    ActivityCompat.shouldShowRequestPermissionRationale(this, permission)) {                needRequestPermissionList.add(permission);            }        }        return needRequestPermissionList;    }    /**     * 系统请求权限回调     *     * @param requestCode     * @param permissions     * @param grantResults     */    @Override    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {        super.onRequestPermissionsResult(requestCode, permissions, grantResults);        if (requestCode == REQUEST_CODE_PERMISSION) {            if (verifyPermissions(grantResults)) {                permissionSuccess(REQUEST_CODE_PERMISSION);            } else {                permissionFail(REQUEST_CODE_PERMISSION);                //showTipsDialog();            }        }    }    /**     * 确认所有的权限是否都已授权     *     * @param grantResults     * @return     */    private boolean verifyPermissions(int[] grantResults) {        for (int grantResult : grantResults) {            if (grantResult != PackageManager.PERMISSION_GRANTED) {                return false;            }        }        return true;    }    /**     * 显示提示对话框     */    public void showTipsDialog() {        new AlertDialog.Builder(this)                .setCancelable(false)                .setTitle("提示信息")                .setMessage("当前应用缺少必要权限,该功能暂时无法使用。如若需要,请单击【确定】按钮前往设置中心进行权限授权。")                .setNegativeButton("取消", new DialogInterface.OnClickListener() {                    @Override                    public void onClick(DialogInterface dialog, int which) {                        finish();                    }                })                .setPositiveButton("确定", new DialogInterface.OnClickListener() {                    @Override                    public void onClick(DialogInterface dialog, int which) {                        startAppSettings();                        finish();                    }                }).show();    }    /**     * 启动当前应用设置页面     */    private void startAppSettings() {        Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);        intent.setData(Uri.parse("package:" + getPackageName()));        startActivity(intent);    }    /**     * 获取权限成功     *     * @param requestCode     */    public void permissionSuccess(int requestCode) {        Log.d(TAG, "获取权限成功=" + requestCode);    }    /**     * 权限获取失败     * @param requestCode     */    public void permissionFail(int requestCode) {        Log.d(TAG, "获取权限失败=" + requestCode);    }}
import android.content.Intent;import android.os.Bundle;import android.text.TextUtils;import com.lava.weather.util.SPUtils;/** * Created by ws on 2016/12/14. */public class SplashActivity extends BaseActivity {    public String[] sRequiredPermissions = new String[] {            android.Manifest.permission.RECORD_AUDIO,            android.Manifest.permission.WRITE_EXTERNAL_STORAGE };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_splash);        if(!checkPermissions(sRequiredPermissions)){            requestPermission(sRequiredPermissions,0x001);            return;        }else{            startActivity();        }    }    @Override    public void permissionSuccess(int requestCode) {        super.permissionSuccess(requestCode);       switch (requestCode){           case 0x001:               startActivity();               break;       }    }    @Override    public void permissionFail(int requestCode) {        super.permissionFail(requestCode);        showTipsDialog();    }    private void startActivity() {        String weather= (String) SPUtils.get(SplashActivity.this,"location",null);        if (TextUtils.isEmpty(weather)) {            // Intent intent = new Intent(this, ChooseAreaActivity.class);            Intent intent = new Intent(this, LavaWeatherActivity.class);            startActivity(intent);            finish();        }else{            Intent intent = new Intent(this, LavaWeatherActivity.class);            startActivity(intent);            finish();        }    }}
0 0