Skip to content

Instantly share code, notes, and snippets.

@afreakyelf
Last active March 19, 2019 09:24
Show Gist options
  • Save afreakyelf/13126341cc6d87bb070b9cbd08ec1c54 to your computer and use it in GitHub Desktop.
Save afreakyelf/13126341cc6d87bb070b9cbd08ec1c54 to your computer and use it in GitHub Desktop.
Capture Image from camera or pick from gallery
import android.Manifest
import android.os.Bundle
import android.support.v4.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import kotlinx.android.synthetic.main.addcare_addphoto_fragment.*
import android.content.Intent
import android.content.pm.PackageManager
import android.widget.Toast
import android.graphics.Bitmap
import android.app.Activity
import android.support.v4.app.ActivityCompat
import android.support.v4.content.ContextCompat
import android.app.AlertDialog
import android.graphics.BitmapFactory
import android.provider.MediaStore
class AddCare_AddPhoto_Fragment : Fragment(){
private val CAMERA_REQUEST = 1888
private val GALLERY_REQUEST = 1889
private val MY_CAMERA_PERMISSION_CODE = 100
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.addcare_addphoto_fragment,container,false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
add_photo.setOnClickListener {
if(ContextCompat.checkSelfPermission
(activity!!,android.Manifest.permission.CAMERA)!= PackageManager.PERMISSION_GRANTED
|| ContextCompat.checkSelfPermission
(activity!!,android.Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED)
{
ActivityCompat.requestPermissions(
(activity!!),
arrayOf(
android.Manifest.permission.CAMERA,
android.Manifest.permission.WRITE_EXTERNAL_STORAGE
),11
)
showPictureDialog()
}else{
showPictureDialog()
}
}
}
private fun showPictureDialog()
{
val pictureDialog = AlertDialog.Builder(context)
pictureDialog.setTitle("Select Action")
val pictureDialogItems = arrayOf("Select photo from gallery", "Capture photo from camera")
pictureDialog.setItems(pictureDialogItems
) { _, which ->
when (which) {
0 -> choosePhotoFromGallary()
1 -> takePhotoFromCamera()
}
}
pictureDialog.show()
}
private fun takePhotoFromCamera() {
val intent = Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE)
startActivityForResult(intent, CAMERA_REQUEST)
}
private fun choosePhotoFromGallary() {
val pickerPhotoIntent =
Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
startActivityForResult(pickerPhotoIntent, CAMERA_REQUEST)
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode == MY_CAMERA_PERMISSION_CODE) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(context, "camera permission granted", Toast.LENGTH_LONG).show()
val cameraIntent = Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE)
startActivityForResult(cameraIntent, CAMERA_REQUEST)
} else {
Toast.makeText(context, "camera permission denied", Toast.LENGTH_LONG).show()
}
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == CAMERA_REQUEST && resultCode == Activity.RESULT_OK) {
val photo = data?.extras?.get("data") as Bitmap
add_photo.setImageBitmap(photo)
}else if(requestCode == GALLERY_REQUEST && resultCode == Activity.RESULT_OK) {
val selectedImage = data?.data
val filePathColumn = arrayOf(MediaStore.Images.Media.DATA)
val cursor = activity?.contentResolver?.query(
selectedImage!!,
filePathColumn, null, null, null
)
cursor?.moveToFirst()
val columnIndex = cursor?.getColumnIndex(filePathColumn[0])
val picturePath = cursor?.getString(columnIndex!!)
cursor?.close()
add_photo.setImageBitmap(BitmapFactory.decodeFile(picturePath))
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment