【问题标题】:Android kotlin_ Camera intent crashesAndroid kotlin 相机意图崩溃
【发布时间】:2019-03-07 00:03:38
【问题描述】:

也许这个问题是多余的,但这里建议的解决方案并没有解决我的问题。

我是 android 开发的新手,我正在尝试使用相机意图在我的应用程序中录制视频。我在 Android 开发者指南中使用了代码 https://developer.android.com/training/camera/videobasics

首先,我遇到了(onActivityResult 不会覆盖任何内容),在这里我发现我应该检查 Intent 是否可以为空,这解决了令人信服的问题,但导致应用程序崩溃。 是的,我已将用户功能放入清单文件中。

有什么解决办法吗?

import android.content.Intent
import android.net.Uri
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.provider.MediaStore
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    val REQUEST_VIDEO_CAPTURE = 1

    override fun onCreate(savedInstanceState: Bundle?) {

        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        btn_record.setOnClickListener {
            Toast.makeText(this, "start recording", Toast.LENGTH_SHORT).show()

            Intent(MediaStore.ACTION_VIDEO_CAPTURE).also { takeVideoIntent ->
                takeVideoIntent.resolveActivity(packageManager)?.also {
                    startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE)
                }
            }   
        }
    }
    override fun onActivityResult(requestCode: Int, resultCode: Int, intent: Intent?) {
        if (requestCode == REQUEST_VIDEO_CAPTURE && resultCode == RESULT_OK) {
            val videoUri: Uri = intent!!.data
            videoView.setVideoURI(videoUri)
        }
    }
}

【问题讨论】:

  • 什么是崩溃日志?
  • java.lang.SecurityException: Permission Denial: starting Intent { act=android.media.action.VIDEO_CAPTURE cmp=com.android.camera2/com.android.camera.VideoCamera } 令人惊讶的是,解决方案是从清单文件中删除权限!
  • java.lang.SecurityException: Permission Denial:当您的应用无权访问相机或图库时发生异常,以便为应用提供相机和图库应用权限 运行时权限 .在android os 6.0之前不需要运行时权限,但是如果你使用的是5.0以上的android版本,那么你需要运行时权限。
  • !! 运算符用于显式告诉编译器该属性不为空,如果为空则抛出异常,因此您应该使用?进行安全检查

标签: android android-intent kotlin


【解决方案1】:

您的项目需要运行时权限才能访问相机。 因为它属于危险的权限集。 这是一篇关于获取相机和麦克风的运行时权限的文章。您可以用于您的项目。 https://pranaybhalerao.wordpress.com/2018/02/11/run-time-permission-in-androidkotlin/ 希望它会有所帮助。

【讨论】:

    【解决方案2】:

    您需要在您声明此 Activity 的 AndroidManifest.xml 文件中设置 android:exported="true"。

    <activity
        android:name="MainActivity"
        android:label="Main_Activity" 
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" >
            </action>
        </intent-filter>
    </activity>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-23
      • 2019-05-03
      • 1970-01-01
      • 1970-01-01
      • 2018-05-07
      • 1970-01-01
      相关资源
      最近更新 更多