google 框架
EasyPermission是google 官方推荐的框架
EasyPermission 引用
dependencies {
// For developers using AndroidX in their applications
implementation 'pub.devrel:easypermissions:3.0.0'
// For developers using the Android Support Library
implementation 'pub.devrel:easypermissions:2.0.1'
}
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
// Forward results to EasyPermissions
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
}
}
EasyPermission 封裝
封裝原因:EasyPermission框架中自帶對話框提示,在公司中一般這個ui都是定制的;而這個封裝就是去除EasyPermission中的對話框,使用自己的UI
package com.tripbay.utility
import android.app.Activity
import androidx.annotation.Size
import androidx.fragment.app.Fragment
import com.lxj.xpopup.XPopup
import com.tripbay.R
import com.tripbay.activity.MainActivity
import com.tripbay.popup.UniversalPopup
import pub.devrel.easypermissions.EasyPermissions
import pub.devrel.easypermissions.PermissionRequest
import pub.devrel.easypermissions.helper.PermissionHelper
/**
* 权限申请
* 配合Easy权限使用的
* 用法:
* /**
* 获取位置
*/
@AfterPermissionGranted(Companion.requestCodePermission)
fun requireLocation(){
//在这里调用
}
*/
class RequestPermissionsUtil {
companion object {
fun permissions(fragment:Fragment,title:String,content:String,ok:String,requestCode:Int,mOnPermissionsListener:OnPermissionsListener,vararg perms:String){
if (EasyPermissions.hasPermissions(fragment.requireContext(), *perms)) {
//业务操作
if(mOnPermissionsListener!=null){
mOnPermissionsListener.onPermissions()
}
} else {
XPopup.Builder(fragment.requireContext())
.dismissOnTouchOutside(false)
.dismissOnBackPressed(false)
.autoOpenSoftInput(true)
.asCustom(
UniversalPopup(fragment.requireContext(),
title,
content,
ok,
object : UniversalPopup.OnOkClickListener {
override fun OnOkClick() {
var request = PermissionRequest.Builder(
fragment,
requestCode,
*perms
).build();
request.getHelper().directRequestPermissions(
requestCode,
*perms
)
}
})
)
.show()
}
}
fun permissions(activity: Activity,title:String,content:String,ok:String,requestCode:Int,mOnPermissionsListener:OnPermissionsListener,vararg perms:String){
if (EasyPermissions.hasPermissions(activity, *perms)) {
//业务操作
if(mOnPermissionsListener!=null){
mOnPermissionsListener.onPermissions()
}
} else {
XPopup.Builder(activity)
.dismissOnTouchOutside(false)
.dismissOnBackPressed(false)
.autoOpenSoftInput(true)
.asCustom(
UniversalPopup(activity,
title,
content,
ok,
object : UniversalPopup.OnOkClickListener {
override fun OnOkClick() {
var request = PermissionRequest.Builder(
activity,
requestCode,
*perms
).build();
request.getHelper().directRequestPermissions(
requestCode,
*perms
)
}
})
)
.show()
}
}
interface OnPermissionsListener{
fun onPermissions()
}
}
}
EasyPermission 使用
private val perms = arrayOf(
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION
)
/**
* 获取位置
*/
@AfterPermissionGranted(Companion.requestCodePermission)
fun requireLocation(){
RequestPermissionsUtil.permissions(this,getString(R.string.add_tour_date_finish_title),getString(
R.string.qx_location
),getString(R.string.popup_qdsq),Companion.requestCodePermission,object:RequestPermissionsUtil.Companion.OnPermissionsListener{
override fun onPermissions() {
locationManager = GoogleLocationManager.instanceFor
locationManager?.getLocation(this@MainActivity)
}
},*perms)
}