引言
为什么那么多人想要自定义Android的权限申请PermissonX?因为PermissionX默认的权限提醒弹出实在是太丑了!而且,需要在你需要提醒用户弹出Dialog时,显得捉襟见肘,你可能就在想有没有一款能封装进去Dialog提醒用户,具有超棒的用户体验,还能看起来美观大气的PermissionX呢?话不多说,今天它来了!
今天就来安利一款郭霖大神写的PermissionX自定义应用权限申请库。简单几行代码让你告别繁琐的原生PermissionX,尽享丝滑~
效果预览
权限申请.gif
用法
第一步:添加依赖(mudule下build.gradle)
dependencies {
implementation 'com.permissionx.guolindev:permissionx:1.4.0'
}
第二步:配置文件添加权限
package="com.permissionx.app">
第三步:布局文件:activity_case29.xml
我简单设置了三个按钮,通过点击事件触发权限申请
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".blog.Case29"
tools:ignore="MissingConstraints" >
android:id="@+id/btn_permission"
android:text="点击申请应用权限(基本版)"
android:layout_margin="5dp"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
android:id="@+id/btn_permission_better"
app:layout_constraintTop_toBottomOf="@id/btn_permission"
android:text="点击申请应用权限(升级版)"
android:layout_margin="5dp"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
android:text="点击申请应用权限(高级版)"
android:id="@+id/btn_permission_best"
android:layout_width="match_parent"
android:layout_margin="5dp"
app:layout_constraintTop_toBottomOf="@id/btn_permission_better"
android:layout_height="wrap_content"/>
第四步:在activity中使用
public class Case29 extends AppCompatActivity {
private Button btnPermission;
private Button btnPermissionBetter;
private Button btnPermissionBest;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_case29);
initView();
btnPermission.setOnClickListener((View)->{
//基本版
basePermissionX();
});
btnPermissionBetter.setOnClickListener((View)->{
//升级版
betterPermissionX();
});
btnPermissionBest.setOnClickListener((View)->{
//高级版
bestPermissionX();
});
}
private void initView(){
btnPermission = findViewById(R.id.btn_permission);
btnPermissionBetter = findViewById(R.id.btn_permission_better);
btnPermissionBest = findViewById(R.id.btn_permission_best);
}
/**
* 基本版
*/
private void basePermissionX(){
PermissionX.init(this)
.permissions(Manifest.permission.READ_CONTACTS, Manifest.permission.CAMERA, Manifest.permission.CALL_PHONE)
.request((allGranted, grantedList, deniedList) -> {
if (allGranted) {
Toast.makeText(this, "所有申请的权限都已通过", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(this, "您拒绝了如下权限:"+deniedList, Toast.LENGTH_LONG).show();
}
});
}
/**
* 改进版
*/
private void betterPermissionX() {
PermissionX.init(this)
.permissions(Manifest.permission.CAMERA, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.RECORD_AUDIO)
.onExplainRequestReason((scope, deniedList) -> {
String message = "PermissionX需要您同意以下权限才能正常使用";
scope.showRequestReasonDialog(deniedList, message, "确定", "取消");
})
.request((allGranted, grantedList, deniedList) -> {
if (allGranted) {
Toast.makeText(this, "所有申请的权限都已通过", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "您拒绝了如下权限:"+deniedList, Toast.LENGTH_SHORT).show();
}
});
}
/**
* 高级版
*/
private void bestPermissionX(){
PermissionX.init(this)
.permissions(Manifest.permission.CAMERA, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.RECORD_AUDIO)
.setDialogTintColor(Color.parseColor("#008577"), Color.parseColor("#83e8dd"))
.onExplainRequestReason((scope, deniedList) -> {
String message = "PermissionX需要您同意以下权限才能正常使用";
scope.showRequestReasonDialog(deniedList, message, "确定", "取消");
})
.request((allGranted, grantedList, deniedList) -> {
if (allGranted) {
Toast.makeText(this, "所有申请的权限都已通过", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "您拒绝了如下权限:"+deniedList, Toast.LENGTH_SHORT).show();
}
});
}
}
大功告成!
效果图
权限申请1.jpeg
权限申请2.jpeg
千夜零一:"之前总是看各种博客学习东西,现在我想用博客记录下我的学习脚步,好东西也需要分享,索取和给予是相互的。以后会尽量日更的!目标完成1001篇博客哈哈。”
如果觉得对你有所帮助,请不要吝啬你的点赞,有问题也可以在下方评论区留言哦,关注我一起学习吧~