Android 常用的 Intent 封装
程序员文章站
2024-03-16 18:45:46
...
本文链接: https://blog.csdn.net/xietansheng/article/details/115762956
1. 打开 Uri
import android.content.Context
import android.content.Intent
import android.net.Uri
fun openUri(context: Context, uri: Uri) {
val intent = Intent()
intent.action = Intent.ACTION_VIEW
intent.data = uri
context.startActivity(intent) // 如果不支持的 Uri 将抛出异常
}
2. 打开 APP 在 设置 中的 应用信息
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.provider.Settings
fun openAppDetails(context: Context, packageName: String) {
val intent = Intent()
intent.action = Settings.ACTION_APPLICATION_DETAILS_SETTINGS
intent.data = Uri.parse("package:$packageName")
intent.addCategory(Intent.CATEGORY_DEFAULT)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY)
intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS)
context.startActivity(intent)
}
3. 在 应用市场 中打开指定 APP
import android.content.Context
import android.content.Intent
import android.net.Uri
fun openAppMarket(context: Context, packageName: String) {
val uri = "market://details?id=$packageName"
val intent = Intent()
intent.action = Intent.ACTION_VIEW
intent.data = Uri.parse(uri)
context.startActivity(intent)
}
4. 打开 APK 安装包
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Build
import androidx.core.content.FileProvider
import java.io.File
fun openInstallApk(context: Context, localApk: File) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
val intent = Intent()
intent.action = Intent.ACTION_INSTALL_PACKAGE
// AndroidManifest.xml 中配置的 <provider/> 节点的 android:authorities 属性值
val authority = "${context.packageName}.fileprovider"
val apkUri = FileProvider.getUriForFile(context, authority, localApk)
intent.setDataAndType(apkUri, "application/vnd.android.package-archive")
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK )
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
context.startActivity(intent)
} else {
val intent = Intent()
intent.action = Intent.ACTION_INSTALL_PACKAGE
val apkUri = Uri.fromFile(localApk)
intent.setDataAndType(apkUri, "application/vnd.android.package-archive")
intent.addCategory(Intent.CATEGORY_DEFAULT)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
context.startActivity(intent)
}
}
5. 发送通用的 文本 和 图片 分享
import android.content.Context
import android.content.Intent
import androidx.core.content.FileProvider
import java.io.File
fun sendTextShare(context: Context, text: String) {
val intent = Intent()
intent.action = Intent.ACTION_SEND
intent.putExtra(Intent.EXTRA_TEXT, text)
intent.type = "text/plain"
context.startActivity(Intent.createChooser(intent,"发送至"))
}
fun sendImageShare(context: Context, localImage: File) {
val intent = Intent()
intent.action = Intent.ACTION_SEND
intent.type = "image/*"
// AndroidManifest.xml 中配置的 <provider/> 节点的 android:authorities 属性值
val authority = "${context.packageName}.fileprovider"
val contentUri = FileProvider.getUriForFile(context, authority, localImage)
intent.putExtra(Intent.EXTRA_STREAM, contentUri)
context.startActivity(Intent.createChooser(intent, "发送至"))
}
6. 打开系统的 图片 或 文件 选择器
import android.app.Activity
import android.content.Intent
fun openSystemImageChooser(context: Activity, requestCode: Int){
val intent = Intent(Intent.ACTION_PICK)
intent.type = "image/*"
context.startActivityForResult(intent, requestCode)
}
fun openSystemFilesChooser(context: Activity, requestCode: Int) {
val intent = Intent(Intent.ACTION_GET_CONTENT)
intent.type = "*/*"
intent.addCategory(Intent.CATEGORY_OPENABLE)
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true) // 支持多选
context.startActivityForResult(Intent.createChooser(intent, "选择文件"), requestCode)
}
-------------------------------------------------------------------------------------
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
class DemoActivity : AppCompatActivity() {
/** 在 Activity 中重写 onActivityResult 获取选取的图片或文件 */
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == {打开选择器的ReqCode} && resultCode == RESULT_OK) {
val uri = data?.data // (单选)选取的图片或文件
val clipData = data?.clipData // (多选)选取的图片或文件
...
}
}
}
7. 打开系统相机拍照
import android.app.Activity
import android.content.Intent
import android.net.Uri
import android.os.Build
import android.provider.MediaStore
import androidx.core.content.FileProvider
import java.io.File
fun openSystemCamera(activity: Activity, requestCode: Int, outputFile: File) {
val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
val outputUri = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
// AndroidManifest.xml 中配置的 <provider/> 节点的 android:authorities 属性值
val authority = "${activity.packageName}.fileprovider"
FileProvider.getUriForFile(activity, authority, outputFile)
} else {
Uri.fromFile(outputFile)
}
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputUri)
activity.startActivityForResult(intent, requestCode)
}
上一篇: MySQL多独立单列索引