Last active
March 19, 2019 09:24
-
-
Save afreakyelf/13126341cc6d87bb070b9cbd08ec1c54 to your computer and use it in GitHub Desktop.
Capture Image from camera or pick from gallery
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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