Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* // use side
- * channelAvatarPicture.setOnClickListener {
- * startActivityForResult(Intent(this@ChannelActivity, ImagePickingActivity::class.java), ImagePickingActivity.REQUEST_IMAGE_CAPTURE)
- * }
- * override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
- * super.onActivityResult(requestCode, resultCode, data)
- * if (requestCode == ImagePickingActivity.REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
- * data?.getStringExtra(ImagePickingActivity.CHOSEN_IMAGE_PATH)?.ofType<String> { chosenImagePath ->
- * // use 'chosenImagePath'
- * }
- * }
- * }
- * // AndroidManifest.xml
- * <uses-permission android:name="android.permission.CAMERA" />
- * <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
- * <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
- */
- import android.Manifest
- import android.annotation.SuppressLint
- import android.app.Activity
- import android.content.Intent
- import android.content.pm.PackageManager
- import android.graphics.Bitmap
- import android.os.Bundle
- import android.os.Environment
- import android.provider.MediaStore
- import android.support.v4.app.ActivityCompat
- import android.support.v4.content.ContextCompat
- import android.support.v7.app.AppCompatActivity
- import jp.co.zeppelin.feelit.android.app.extension.ofType
- import java.io.ByteArrayOutputStream
- import java.io.File
- import java.io.FileOutputStream
- import java.io.IOException
- import java.text.SimpleDateFormat
- import java.util.*
- class ImagePickingActivity : AppCompatActivity() {
- companion object {
- val CAMERA_REQUEST_CODE = 63254
- val REQUEST_IMAGE_CAPTURE = 3737
- val REQUEST_CAMERA = 23244
- val CHOSEN_IMAGE_PATH = "CHOSEN_IMAGE_PATH"
- }
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- if (ContextCompat.checkSelfPermission(this@ImagePickingActivity, Manifest.permission.CAMERA)
- != PackageManager.PERMISSION_GRANTED) {
- ActivityCompat.requestPermissions(this@ImagePickingActivity,
- arrayOf(Manifest.permission.CAMERA), CAMERA_REQUEST_CODE)
- } else {
- // Permission has already been granted
- dispatchTakePictureIntent()
- }
- }
- override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
- super.onRequestPermissionsResult(requestCode, permissions, grantResults)
- when (requestCode) {
- CAMERA_REQUEST_CODE -> {
- // If request is cancelled, the result arrays are empty.
- if ((grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
- dispatchTakePictureIntent()
- } else {
- finish()
- }
- return
- }
- else -> {
- }
- }
- }
- override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
- super.onActivityResult(requestCode, resultCode, data)
- when (resultCode) {
- Activity.RESULT_CANCELED -> {
- finish()
- }
- Activity.RESULT_OK -> {
- if (requestCode == REQUEST_CAMERA) {
- val bitmap = data?.extras?.get("data")
- bitmap?.ofType<Bitmap> {
- val filePath = bitmapToFile(it)
- setResult(Activity.RESULT_OK, Intent().apply { putExtra(CHOSEN_IMAGE_PATH, filePath) })
- finish()
- }
- }
- }
- else -> {
- }
- }
- }
- @SuppressLint("SimpleDateFormat")
- @Throws(IOException::class)
- private fun createImageFile(): File {
- // Create an image file name
- val timeStamp: String = SimpleDateFormat("yyyyMMdd_HHmmss").format(Date())
- val storageDir: File = getExternalFilesDir(Environment.DIRECTORY_PICTURES)
- val file = File.createTempFile(
- "JPEG_${timeStamp}_", /* prefix */
- ".jpg", /* suffix */
- storageDir /* directory */
- )
- return file
- }
- private fun bitmapToFile(bitmap: Bitmap): String {
- //create a file to write bitmap data
- val file = createImageFile()
- //Convert bitmap to byte array
- val byteArrayOutputStream: ByteArrayOutputStream = ByteArrayOutputStream()
- bitmap.compress(Bitmap.CompressFormat.PNG, 0 /*ignored for PNG*/, byteArrayOutputStream)
- val bitmapdata = byteArrayOutputStream.toByteArray()
- //write the bytes in file
- val fileOutputStream = FileOutputStream(file)
- fileOutputStream.write(bitmapdata)
- fileOutputStream.flush()
- fileOutputStream.close()
- return file.absolutePath
- }
- private fun dispatchTakePictureIntent() {
- Intent(MediaStore.ACTION_IMAGE_CAPTURE).also { takePictureIntent ->
- takePictureIntent.resolveActivity(packageManager)?.also {
- startActivityForResult(takePictureIntent, REQUEST_CAMERA)
- }
- }
- }
- }
Add Comment
Please, Sign In to add comment