PermissionsDispatcher จัดเตรียม API ที่ใช้คำอธิบายประกอบอย่างง่ายเพื่อจัดการสิทธิ์รันไทม์
ไลบรารีนี้ช่วยขจัดภาระที่มาพร้อมกับการเขียนคำสั่งเช็คจำนวนมากไม่ว่าจะได้รับอนุญาตจากคุณหรือไม่ก็ตาม เพื่อรักษาโค้ดของคุณให้สะอาดและปลอดภัย
นี่คือตัวอย่างขั้นต่ำที่คุณลงทะเบียน MainActivity
ซึ่งต้องใช้ Manifest.permission.CAMERA
เพิ่มบรรทัดต่อไปนี้ใน AndroidManifest.xml
:
<uses-permission android:name="android.permission.CAMERA" />
PermissionsDispatcher แนะนำคำอธิบายประกอบเพียงไม่กี่รายการ ทำให้ API ทั่วไปมีความกระชับ:
หมายเหตุ: วิธีการใส่คำอธิบายประกอบจะต้องไม่เป็น
private
คำอธิบายประกอบ | ที่จำเป็น | คำอธิบาย |
---|---|---|
@RuntimePermissions | ลงทะเบียน Activity หรือ Fragment เพื่อจัดการสิทธิ์ | |
@NeedsPermission | ใส่คำอธิบายประกอบวิธีการที่ดำเนินการที่ต้องใช้สิทธิ์ตั้งแต่หนึ่งรายการขึ้นไป | |
@OnShowRationale | ใส่คำอธิบายประกอบวิธีการที่อธิบายว่าทำไมจึงต้องมีการอนุญาต มันส่งผ่านในวัตถุ PermissionRequest ซึ่งสามารถใช้เพื่อดำเนินการต่อหรือยกเลิกการร้องขอการอนุญาตปัจจุบันเมื่อผู้ใช้ป้อนข้อมูล หากคุณไม่ได้ระบุอาร์กิวเมนต์ใดๆ สำหรับเมธอดคอมไพเลอร์จะสร้าง process${NeedsPermissionMethodName}ProcessRequest และ cancel${NeedsPermissionMethodName}ProcessRequest คุณสามารถใช้วิธีการเหล่านั้นแทน PermissionRequest (เช่น: กับ DialogFragment ) | |
@OnPermissionDenied | ใส่คำอธิบายประกอบวิธีการที่ถูกเรียกใช้หากผู้ใช้ไม่ให้สิทธิ์ | |
@OnNeverAskAgain | ใส่คำอธิบายประกอบวิธีการที่ถูกเรียกใช้หากผู้ใช้เลือกที่จะให้อุปกรณ์ "ไม่ต้องถามอีก" เกี่ยวกับการอนุญาต |
@RuntimePermissions
class MainActivity : AppCompatActivity (), View.OnClickListener {
@NeedsPermission( Manifest .permission. CAMERA )
fun showCamera () {
supportFragmentManager.beginTransaction()
.replace( R .id.sample_content_fragment, CameraPreviewFragment .newInstance())
.addToBackStack( " camera " )
.commitAllowingStateLoss()
}
@OnShowRationale( Manifest .permission. CAMERA )
fun showRationaleForCamera ( request : PermissionRequest ) {
showRationaleDialog( R .string.permission_camera_rationale, request)
}
@OnPermissionDenied( Manifest .permission. CAMERA )
fun onCameraDenied () {
Toast .makeText( this , R .string.permission_camera_denied, Toast . LENGTH_SHORT ).show()
}
@OnNeverAskAgain( Manifest .permission. CAMERA )
fun onCameraNeverAskAgain () {
Toast .makeText( this , R .string.permission_camera_never_askagain, Toast . LENGTH_SHORT ).show()
}
}
ฟังก์ชันที่สร้างขึ้นตอนนี้กระชับและใช้งานง่ายกว่าเวอร์ชัน Java มาก!
override fun onCreate ( savedInstanceState : Bundle ? ) {
super .onCreate(savedInstanceState)
setContentView( R .layout.activity_main)
findViewById( R .id.button_camera).setOnClickListener {
// NOTE: delegate the permission handling to generated function
showCameraWithPermissionCheck()
}
}
override fun onRequestPermissionsResult ( requestCode : Int , permissions : Array < String >, grantResults : IntArray ) {
super .onRequestPermissionsResult(requestCode, permissions, grantResults)
// NOTE: delegate the permission handling to generated function
onRequestPermissionsResult(requestCode, grantResults)
}
ตรวจสอบตัวอย่างเพื่อดูรายละเอียดเพิ่มเติม
บันทึก:
หากต้องการเพิ่ม PermissionsDispatcher ให้กับโปรเจ็กต์ของคุณ ให้รวมสิ่งต่อไปนี้ในไฟล์ build.gradle
โมดูลแอป ของคุณ:
${latest.version}
คือ
dependencies {
implementation " com.github.permissions-dispatcher:permissionsdispatcher: ${ latest.version } "
annotationProcessor " com.github.permissions-dispatcher:permissionsdispatcher-processor: ${ latest.version } "
}
ด้วย Kotlin:
apply plugin : ' kotlin-kapt '
dependencies {
implementation " com.github.permissions-dispatcher:permissionsdispatcher: ${ latest.version } "
kapt " com.github.permissions-dispatcher:permissionsdispatcher-processor: ${ latest.version } "
}
Copyright 2016 Shintaro Katafuchi, Marcel Schnelle, Yoshinori Isogai
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.