事件分发机制

Android中的事件传递机制

基本流程:Activity –>ViewGroup–>View–>ViewGroup–>Activity
注意:分发过程中false/true都可以拦截事件,super让事件保持从外到内传递,消耗过程中false/super可以保持事件的从内到外的传递,但是super可以保持视图原有的基本监听(点击、长按)处理,消耗过程中返回true表示拦截事件。
ViewGroup的特殊传递方法onIterceptTouchEvent,可以决定事件是被布局消耗还是给孩子先消耗true表示自己处理,false表示将事件先给孩子

动态权限申请流程

1.检测是否授权

注意:分发过程中false/true都可以拦截事件,super让事件保持从外到内传递,消耗过程中false/super可以保持事件的从内到外的传递,但是super可以保持视图原有的基本监听(点击、长按)处理,消耗过程中返回true表示拦截事件。
ViewGroup的特殊传递方法onIterceptTouchEvent,可以决定事件是被布局消耗还是给孩子先消耗true表示自己处理,false表示将事件先给孩子

2、申请授权

ActivityCompat.requestPermissions(this,
new  String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},  REQUEST_PERMISSION);

3、处理授权结果

在Activity中重写onRequestPermissionsResult

//授权结果@Override
public  void  onRequestPermissionsResult(int  requestCode,  @NonNull  String[]  permissions,  @NonNull  int[]  grantResults)  { super.onRequestPermissionsResult(requestCode,  permissions,  grantResults);
if  (requestCode  ==  REQUEST_PERMISSION)  {
if  (grantResults[0]  ==  PackageManager.PERMISSION_DENIED)  {
//用户拒绝
//检测是否有必要跟用户说明为什么要申请这个权限,如果拒绝了会有什么结果
if  (ActivityCompat.shouldShowRequestPermissionRationale(WelcomeActivity.this,  permissions[0]))  {
//解释一下
AlertDialog.Builder  b  =  new  AlertDialog.Builder(WelcomeActivity.this);
b.setTitle("警告")
.setMessage("不授权将影响应用的正常使用,是否需要重新授权?")
.setPositiveButton("是",  new  DialogInterface.OnClickListener()  {
@Override
public  void  onClick(DialogInterface  dialog,  int  which)  { ActivityCompat.requestPermissions(WelcomeActivity.this,
new  String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},  REQUEST_PERMISSION);
}
}).setNegativeButton("否",  new  DialogInterface.OnClickListener()  { @Override
public  void  onClick(DialogInterface  dialog,  int  which)  { finish();
}
});
b.show();
}
}  else  {
toMainActivity();
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值