as 拍照取照片
拍照
先要有一个outputImage, 新建一个,用于存储拍的照片。再取到这个uri, 再intent, android.media.action.IMAGE_CAPTURE,putExtra到uri上。然后在OnActiveResult里when 一下,就找到返回 RESULT_OK,BitmapFactory.decodeStream取到 bitmap,显示出来。
从相册取照片,也是intent , Intent.ACTION_OPEN_DOCUMENT, addCatagory(Intent.CATEGORY_OPENABLE), type="image/*",然后从OnActiveResult里取。见上

1 package com.example.myapplication 2 3 import android.app.Activity 4 import android.content.Intent 5 import android.graphics.Bitmap 6 import android.graphics.BitmapFactory 7 import android.graphics.Matrix 8 import android.media.ExifInterface 9 import android.media.Image 10 import android.net.Uri 11 import android.os.Build 12 import android.os.Bundle 13 import android.provider.MediaStore 14 import android.widget.Button 15 import android.widget.ImageView 16 import androidx.appcompat.app.AppCompatActivity 17 import androidx.core.content.FileProvider 18 import java.io.File 19 20 21 class MainActivity2222 : AppCompatActivity() { 22 23 private lateinit var imageview: ImageView 24 val takePhoto = 1 25 lateinit var imageUrl:Uri 26 lateinit var outputImage:File 27 28 var fromAlbum = 2 29 30 override fun onCreate(savedInstanceState: Bundle?) { 31 super.onCreate(savedInstanceState) 32 //enableEdgeToEdge() 33 setContentView(R.layout.activity_main2222) 34 35 // ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets -> 36 // val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) 37 // v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) 38 // insets 39 // } 40 41 42 43 // val list= listOf("b","c","d","e","f","a") 44 // val result = with(StringBuilder()){ 45 // append("Start eating fruits.\n") 46 // for (fruit in list){ 47 // append(fruit).append("\n") 48 // } 49 // append("end.") 50 // toString() 51 // } 52 // println(result) 53 54 val sb = StringBuilder() 55 val tt = sb.run{ 56 append(".aa").append(",") 57 99 58 } 59 println(tt) 60 61 // val sb = StringBuilder().apply { 62 // append("Hello.") 63 // append(",") 64 // } 65 // println(sb) 66 67 68 imageview = findViewById<ImageView>(R.id.imageView1) 69 var btn1 = findViewById<Button>(R.id.button1) 70 var btnOpen = findViewById<Button>(R.id.btnOpenAlbum) 71 btnOpen.setOnClickListener{ 72 73 val intent = Intent(Intent.ACTION_OPEN_DOCUMENT) 74 intent.addCategory(Intent.CATEGORY_OPENABLE) 75 intent.type = "image/*" 76 startActivityForResult(intent, fromAlbum) 77 } 78 79 80 btn1.setOnClickListener(){ 81 82 outputImage = File(externalCacheDir, "output_image.jpg") 83 if(outputImage.exists()){ 84 outputImage.delete() 85 } 86 outputImage.createNewFile() 87 88 //因为从android 7系统开始,直接使用本地真实路径的Uri被认为是不安全的, 89 //可以选择性地将封装过Uri 共享给外部,从而提高了应用的安全性 90 // imageUrl = if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){ 91 // FileProvider.getUriForFile(this, "com.example.myapplication.fileprovider",outputImage) 92 // }else{ 93 // Uri.fromFile(outputImage) 94 // } 95 96 imageUrl = FileProvider.getUriForFile(this, "com.example.myapplication.fileprovider",outputImage) 97 98 val intent = Intent("android.media.action.IMAGE_CAPTURE") 99 intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUrl) 100 startActivityForResult(intent,takePhoto) 101 102 103 // var intent = Intent(this, DateActivity::class.java) 104 // startActivity(intent) 105 106 // var intent2 = Intent("com.example55.myapplication55.TEST55") 107 // intent2.addCategory("android.intent.category.DEFAULT55") 108 // startActivity(intent2) 109 110 // val uri = Uri.parse("tel:10086") //拨号程序 111 // val intent = Intent(Intent.ACTION_VIEW, uri) 112 // startActivity(intent); 113 114 // val uri = Uri.parse("geo:39.899533,116.036476") 115 // val intent = Intent(Intent.ACTION_VIEW, uri) 116 // startActivity(intent) 117 118 //通过包名启动--无效 119 // val launchIntent = packageManager.getLaunchIntentForPackage("com.android.chrome") 120 // startActivity(launchIntent) 121 122 123 124 // val pm = packageManager 125 // //var isChromeInstalled: Boolean 126 // try { 127 // pm.getPackageInfo("com.android.chrome", PackageManager.GET_ACTIVITIES) 128 // 129 // val intent = Intent(Intent.ACTION_VIEW) 130 // intent.setData(Uri.parse("www.baidu.com")) 131 // intent.setPackage("com.android.chrome") // 指定 Chrome 包名 132 // startActivity(intent) 133 // 134 // } catch (e: PackageManager.NameNotFoundException) { 135 // Toast.makeText(this,"未安装chrome", Toast.LENGTH_LONG).show() 136 // } 137 138 139 // val uri = 140 // Uri.parse("https://www.csdn.net/") 141 // try { 142 // val intent = Intent(Intent.ACTION_VIEW, uri) 143 // //指定谷歌浏览器 144 // intent.setClassName("com.android.chrome", "com.google.android.apps.chrome.Main") 145 // startActivity(intent) 146 // } catch (e: Exception) { 147 // val intent = Intent(Intent.ACTION_VIEW, uri) 148 // startActivity(intent) 149 // } 150 151 152 } 153 154 155 } 156 157 158 override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { 159 super.onActivityResult(requestCode, resultCode, data) 160 when(requestCode){ 161 takePhoto->{ 162 if(resultCode == Activity.RESULT_OK){ 163 val bitmap = BitmapFactory.decodeStream(contentResolver.openInputStream(imageUrl)) 164 imageview.setImageBitmap(rotateIfRequired(bitmap)) 165 } 166 } 167 fromAlbum->{ 168 if(resultCode == Activity.RESULT_OK && data != null){ 169 data.data?.let { uri-> 170 //将选择的图片 171 val bitmap = getBitmapFromUri(uri) 172 imageview.setImageBitmap(bitmap) 173 } 174 } 175 } 176 } 177 } 178 private fun getBitmapFromUri(uri: Uri) = contentResolver 179 .openFileDescriptor(uri, "r")?.use { 180 BitmapFactory.decodeFileDescriptor((it.fileDescriptor)) 181 } 182 183 private fun rotateIfRequired(bitmap: Bitmap):Bitmap{ 184 val exif = ExifInterface(outputImage.path) 185 val orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL) 186 return when(orientation){ 187 ExifInterface.ORIENTATION_ROTATE_90 -> rotateBitmap(bitmap, 90) 188 ExifInterface.ORIENTATION_ROTATE_180 -> rotateBitmap(bitmap, 180) 189 ExifInterface.ORIENTATION_ROTATE_270 -> rotateBitmap(bitmap, 270) 190 else->bitmap 191 } 192 } 193 private fun rotateBitmap(bitmap: Bitmap, degree:Int):Bitmap{ 194 val matrix = Matrix() 195 matrix.postRotate(degree.toFloat()) 196 val rotateBitmap = Bitmap.createBitmap(bitmap, 0,0,bitmap.width,bitmap.height,matrix, true) 197 bitmap.recycle() 198 return rotateBitmap 199 } 200 201 202 203 } 204 class People(name:String, age:Int){}