当前位置: 首页 > 知识库问答 >
问题:

Android应用程序崩溃

楚方伟
2023-03-14

在以前的代码上,谁医生帮了我

现在,android应用程序在我的手机上运行时崩溃了,这是错误日志

第一个问题是在我用相机扫描二维码后,它不能显示在二维码的结果进入tvResult

第二个问题是,我从存储器中选择了一个QRcode图像,然后点击确认,它崩溃了

下面是我认为的问题

类型不匹配:推断的类型是Uri?但乌里是意料之中的

galleryLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult(), object :ActivityResultCallback<ActivityResult>{
            override fun onActivityResult(result: ActivityResult?) {
                val data=result?.data
                inputImage = InputImage.fromFilePath(requireContext(), data?.data)
                processQr()
            }
        })

冗余SAM构造函数

binding.btnScanBarcode.setOnClickListener{
            val options=arrayOf("camera","gallery")

            val builder=AlertDialog.Builder(requireContext())
            builder.setTitle("Pick a option")

            builder.setItems(options, DialogInterface.OnClickListener { dialog, which ->
                if(which==0){
                    val cameraIntent=Intent(MediaStore.ACTION_IMAGE_CAPTURE)
                    cameraLauncher.launch(cameraIntent)
                }else{
                    val storageIntent=Intent()
                    storageIntent.setType("image/*")
                    storageIntent.setAction(Intent.ACTION_GET_CONTENT)
                    galleryLauncher.launch(storageIntent)
                }
            })
            builder.show()
        }

'onRequestPermissionsResult(Int,数组

override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)

        if(requestCode==CAMERA_PERMISSION_CODE){
            if(grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED){
                checkPermission(
                    Manifest.permission.READ_EXTERNAL_STORAGE,
                    READ_STORAGE_PERMISSION_CODE)
            }else{
                Toast.makeText(requireContext(), "Camera Permission Denied", Toast.LENGTH_SHORT).show()
            }
        }else if(requestCode==READ_STORAGE_PERMISSION_CODE){
            if((grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED)){
                checkPermission(
                    Manifest.permission.WRITE_EXTERNAL_STORAGE,
                    WRITE_STORAGE_PERMISSION_CODE)
            }else{
                Toast.makeText(requireContext(), "Storage Permission Denied", Toast.LENGTH_SHORT).show()
            }
        }else if(requestCode==WRITE_STORAGE_PERMISSION_CODE) {
            if (!(grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
                Toast.makeText(requireContext(), "Storage Permission Denied", Toast.LENGTH_SHORT).show()
            }
        }
    }

共有1个答案

史鸿运
2023-03-14

onquiestPermissionsResult()方法在中androidx.fragment.app.片段中不建议使用。

所以您使用recsterForActivityResult()方法来代替onCriestPermissionsResult()

以下是kotlin代码

val permReqLuncher = registerForActivityResult(ActivityResultContracts.RequestPermission()){
  if (it) {
     // Good pass
  } else {
     // Failed pass
  }
}

如何在新的ActivityResult API(1.3.0-alpha05)中获取权限请求?

private ActivityResultLauncher<String> mPermissionResult = registerForActivityResult(
        new ActivityResultContracts.RequestPermission(),
        new ActivityResultCallback<Boolean>() {
            @Override
            public void onActivityResult(Boolean result) {
                if(result) {
                    Log.e(TAG, "onActivityResult: PERMISSION GRANTED");
                } else {
                    Log.e(TAG, "onActivityResult: PERMISSION DENIED");
                }
            }
        });



        // Launch the permission window -- this is in onCreateView()
    floatingActionButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
         mPermissionResult.launch(Manifest.permission.ACCESS_BACKGROUND_LOCATION);

        }
    });

您可以请求多个权限。

val requestMultiplePermissions = registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { permissions ->
    permissions.entries.forEach {
        Log.e("DEBUG", "${it.key} = ${it.value}")
    }
}

requestMultiplePermissions.launch(
    arrayOf(
        Manifest.permission.READ_CONTACTS,
        Manifest.permission.ACCESS_FINE_LOCATION
   )
)
 类似资料:
  • 我正在尝试将图像添加到我新创建的应用程序中。但是,当我运行我的应用程序时,它会崩溃。我没有在我的应用程序中编写任何代码,因此我提供了XML代码和错误日志。我在以前的应用程序中使用了ImageViews。没有错误。我已经优化了我的图像,但它仍然给我错误。 图像详细信息 错误日志: 09-08 16:03:02.266 15137-15137/ooper.loopE/AndroidRuntime: F

  • 我正在编写一个应用程序,使用android wear设备读取心率和步数。心率传感器工作正常,但步数引起了问题。但是,在注释步进计数器的侦听器并在onResume()中注册一个空值时,应用程序可以使用心率传感器。我没有得到任何关于这个的日志,否则我会把它贴在这里。这是我使用的代码 更新

  • 问题内容: 每次我从Eclipse导出签名应用程序并将apk文件安装到手机上时,该应用程序都会崩溃。这仅在启用Proguard的情况下发生。 这是我的保护文件 我运行了adb logcat命令来检查崩溃报告。以下是我认为很重要的报告摘要: 第二段: 如果有人可以帮助我,我将非常感谢并接受您的回答。 更新: 所以我将这些添加到我的proguard文件中 现在启用Proguard时出现与Jackson

  • 问题内容: 我正在开发一个Android 3.1应用程序,该应用程序使用USB主机模式通过USB上的MIDI与我的键盘(Korg M3)进行通信。这是在装有Android 4.0.3的Xoom上运行的。我可以通过USB接收MIDI消息而没有任何问题,但是将音符数据发送回键盘的效果是好坏参半,延迟半秒钟后便会频繁崩溃。 这是我在点击操作栏上的按钮发送注释时不断遇到的错误: E / dalvikvm(

  • 问题内容: 我使用的是Eclipse helios和Android 4.1.2,我已按照以下文档https://docs.google.com/document/pub?id=19nQzvKP- CVLd7_VrpwnHfl- AE9fjbJySowONZZtNHzw 进行操作,并完全按照了教程中的描述进行了编码。我在模拟器上的应用程序显示“除非您更新Google Play服务,否则该应用程序将无

  • 当我尝试更新应用程序时,应用程序崩溃了。在我们的应用程序中,我们正在缓存中保存更新的版本,然后尝试从缓存中安装应用程序。应用程序由于android.os.fileuriexposedexception而崩溃。我发现通过intent.getData()在应用程序之外公开了日志android.os.fileuriexposedexception:file:///storage/emulated/0/t