Created
January 23, 2019 09:42
-
-
Save worker8/46126a7497611f657c8d07344c3e5545 to your computer and use it in GitHub Desktop.
This file contains hidden or 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
/* // 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) | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment