1. 封装的意义
- 每次在需要判断权限的地方均写如上面所示的一套方法,很麻烦。
- 封装后只需要改变传进来的我们需要判断的权限即可。
2. 使用方法
2.1 步骤01
@RuntimePermissions
public class MainActivity extends AppCompatActivity {
private Button mButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mButton = (Button) findViewByaId(R.id.bt_button);
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
}
@NeedsPermission(Manifest.permission.CALL_PHONE)
void call() {
Intent intent = new Intent(Intent.ACTION_CALL);
Uri data = Uri.parse("tel:" + "10086");
intent.setData(data);
try {
startActivity(intent);
} catch (SecurityException e) {
e.printStackTrace();
}
}
@OnShowRationale(Manifest.permission.CALL_PHONE)
void showWhy(final PermissionRequest request) {
new AlertDialog.Builder(this)
.setMessage("拨打电话需要您的同意")
.setPositiveButton("知道了", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
request.proceed();
}
}).show();
}
@OnPermissionDenied(Manifest.permission.CALL_PHONE)
void showDenied() {
Toast.makeText(this, "您拒绝了拨打电话的操作", Toast.LENGTH_SHORT).show();
}
@OnNeverAskAgain(Manifest.permission.CALL_PHONE)
void showNotAsk() {
new AlertDialog.Builder(MainActivity.this).setMessage("该功能需要访问电话的权限,不开启将无法正常工作!")
.setPositiveButton("去开启", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS);
startActivity(intent);
}
})
.setNegativeButton("保持禁止", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
})
.create()
.show();
}
}
2.2 步骤02
- Build-Make Moudle ‘app’
- 伴随着会生成MainActivityPermissionsDispatcher类
- 重写onRequestPermissionsResult方法
- 代码如下:
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
MainActivityPermissionsDispatcher.onRequestPermissionsResult(this, requestCode, grantResults);
}
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MainActivityPermissionsDispatcher.callWithPermissionCheck(MainActivity.this);
}
});
}
3. Demo地址
https://github.com/OnlyYouMyLove/MyPermissionsDispatcher