android - 无法解决此问题?得到错误吐司“无法访问相机”Kotlin -Android
问题描述
我收到吐司错误 Unable to access camera
,codeScanner.errorCallback = ErrorCallback
我在清单中正确授予了相机权限
这是我的kt代码。
class scannerActivity: AppCompatActivity() {
private lateinit var codeScanner: CodeScanner
val MY_CAMERA_PERMISSION_REQUEST = 1111
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_scanner)
val Button = findViewById<Button>(R.id.button6)
Button.setOnClickListener {
startActivity(Intent(this@scannerActivity, conductorMenu::class.java))}
val scannerView = findViewById<CodeScannerView>(R.id.scannerView)
codeScanner = CodeScanner(this@scannerActivity, scannerView)
codeScanner.camera = CodeScanner.CAMERA_BACK
codeScanner.formats = CodeScanner.ALL_FORMATS
codeScanner.autoFocusMode = AutoFocusMode.SAFE
codeScanner.scanMode = ScanMode.SINGLE
codeScanner.isAutoFocusEnabled = true
codeScanner.isFlashEnabled = false
codeScanner.decodeCallback = DecodeCallback {
runOnUiThread {
Toast.makeText(this@scannerActivity, "Scan result: ${it.text}", Toast.LENGTH_LONG).show()
}
}
codeScanner.errorCallback = ErrorCallback {
runOnUiThread {
Toast.makeText(this@scannerActivity, "Camera error: ${it.message}", Toast.LENGTH_LONG).show()
}
}
checkPermission()
}
fun checkPermission(){
if (ContextCompat.checkSelfPermission(this@scannerActivity, Manifest.permission.CAMERA)!=PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(this@scannerActivity, arrayOf(Manifest.permission.CAMERA), MY_CAMERA_PERMISSION_REQUEST)
} else{
codeScanner.startPreview()
}
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode==MY_CAMERA_PERMISSION_REQUEST && grantResults.isNotEmpty() && grantResults[0]==PackageManager.PERMISSION_GRANTED){
codeScanner.startPreview()
}
else{
Toast.makeText(this@scannerActivity, "Cannot scan until you give camera permission", Toast.LENGTH_LONG).show()
}
}
override fun onResume() {
super.onResume()
codeScanner.startPreview()
}
override fun onPause() {
codeScanner.releaseResources()
super.onPause()
}
}
`<uses-permission android:name="android.permission.CAMERA"/>`
帮助解决这个问题?
解决方案
首先,您必须将 multidex 放入您的构建 gradle
android {
defaultConfig {
...
minSdkVersion(15)
targetSdkVersion(28)
multiDexEnabled = true
}
...
}
dependencies {
implementation("androidx.multidex:multidex:2.0.1")
}
然后您有 3 种方式可供您选择 1.) 清单文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
<application
android:name="androidx.multidex.MultiDexApplication" >
...
</application>
</manifest>
2.) 覆盖应用程序类
class MyApplication : MultiDexApplication() {...}
3.) 将 Multidex 函数添加到应用程序类
class MyApplication : SomeOtherApplication() {
override fun attachBaseContext(base: Context) {
super.attachBaseContext(base)
MultiDex.install(this)
}
在某些情况下,您可能还必须对您的 progaurd 进行修改。你可以在这里阅读更多关于它的信息 https://developer.android.com/studio/build/multidex#kts }
推荐阅读
- swift - 离线 MapBox 侧载合并
- bash - 根据数组信息循环文件及其版本
- android - Android导航组件+登录流程+嵌套BottomNavigationView
- sql - 将字符串拆分为仅两列
- c++ - 如何获取操作系统 Windows 会话凭据?
- java - 使用签名的 jwt 令牌连接开发人员苹果商店连接
- c# - 如何在 ASP.NET Core MVC 2.2 中的 SignalR 集线器和 BackgroundService 之间共享信息
- php - 在 WooCommerce 结帐页面上删除登录表单(和注册)
- datetime - 如何将 YYYYMM 转换为日期时间?
- javascript - 如何知道异步 forEach 何时完成