최지웅
479
2021-02-08 11:38:14
1
172

안드로이드 카메라 앱선택





        val intentCamera = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
      //  intentCamera.setPackage("com.android.camera")

        val path = this.getFilesDir()
        val timeStamp: String = SimpleDateFormat("yyyyMMdd_HHmmss").format(Date())
        val imageFileName = "JPEG_" + timeStamp + "_"
        val file = File(path, imageFileName+".png")


        // File 객체의 URI 를 얻는다.
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {

            cameraImageUri = FileProvider.getUriForFile(
                this,
                getApplicationContext().getPackageName() + ".fileprovider",
                file
            )

        } else {
            Log.d("cameracheck","cameracheck2")
            cameraImageUri = Uri.fromFile(file)
        }
        intentCamera.putExtra(MediaStore.EXTRA_OUTPUT, cameraImageUri)
        Log.d("cameraImageUri",cameraImageUri.toString())
        if (!_isCapture) {

            val pickIntent = Intent(Intent.ACTION_PICK)
            pickIntent.setType(MediaStore.Images.Media.CONTENT_TYPE)
            pickIntent.setData(MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
            val pickTitle = "사진 가져올 방법을 선택하세요."
            val chooserIntent = Intent.createChooser(pickIntent, pickTitle)

            // 카메라 intent 포함시키기..
            chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, arrayOf<Parcelable>(intentCamera))
           startActivityForResult(chooserIntent, FILECHOOSER_LOLLIPOP_REQ_CODE)
          //  startActivityForResult(intentCamera, FILECHOOSER_LOLLIPOP_REQ_CODE)

        } else {
            // 바로 카메라 실행..
            startActivityForResult(intentCamera, FILECHOOSER_LOLLIPOP_REQ_CODE)
        }
    }


"이미지 캡처" 안에  카메라 앱들이 정렬되어있습니다.

"이미지 캡처"라는 텍스트를 "카메라 선택" 으로 바꾸거나

기본카메라만 사용하도록 바꾸고 싶은데, 기본 카메라 패키지명은 회사마다 달라서 어려움이 있습니다.

어떻게 하면 좋을까요? ㅜㅜ

0
  • 답변 1

  • 최지웅
    479
    2021-02-08 15:29:39

    자답입니다.

    카메라 패키지 이름이 회사마다 다르다곤 하지만

    "3f36b5c com.sec.android.app.camera/.Camera m=0x108000"

    위처럼 com~/ 까지 이름만 다를 뿐 나머지 형식은 같습니다 

    따라서 "com.sec.android.app.camera" 이 부분까지만 split으로 잘라내고 

    패키지로 만들면 해결됩니다



          
         val pkgList: List<ResolveInfo> =
                packageManager.queryIntentActivities(intentCamera, PackageManager.MATCH_DEFAULT_ONLY)
    
        if (pkgList != null && pkgList.size > 0) {
    
                    var pkg = pkgList[0]?.toString().split("/")
    
                    var pgk1 = pkg[0].split(" ")
                    intentCamera.setPackage(pgk1[1].toString())
                }


  • 로그인을 하시면 답변을 등록할 수 있습니다.