欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android 开发常用的 kotlin 工具方法

程序员文章站 2024-02-11 00:02:46
...

快一个月没更新博文了,最近业余时间在写 Flutter_WanAndroid 项目以及一个小程序。后续都会更新博文介绍项目中遇到的问题和解决办法。这里先分享下最近在公司项目上使用 Kotlin 开发使用的一些工具类。

  • 调用拍照
  • 拨打电话、发送短信
  • 启动系统权限设置页面
  • 启动应用市场
  • 使用 WPS 打开文件
  1. 调用拍照
新建 xml 文件,存放路径
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
  <external-path
          name="external_files"
          path="creaway/"/>
</paths>

调用方法
 override fun takePhoto(activity: Activity, requestCode:Int) {
   var outputImage = File(activity.externalCacheDir,"test_image.jpg")
   try{
       if(outputImage.exists()) {
           outputImage.delete()
       }
   }catch (ex: IOException) {
       ex.printStackTrace()
   }

   if(Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
       imageUri = Uri.fromFile(outputImage)
   }else {
       imageUri = FileProvider.getUriForFile(activity,"android.support.v4.content.FileProvider",outputImage)
   }

   val intent = Intent("android.media.action.IMAGE_CAPTURE")
   intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri)
   activity.startActivityForResult(intent, requestCode)
}

处理得到的结果
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
   super.onActivityResult(requestCode, resultCode, data)
   if (requestCode == REQUEST_CODE) {
       if (resultCode == RESULT_OK) {
           // 处理返回的结果
       }
   }
}

  1. 拨打电话、发送短信
btn_phone.setOnClickListener {
  var intent = Intent(Intent.ACTION_DIAL)
  intent.data = Uri.parse("tel:${user!!.phone_number}")
  startActivity(intent)
}

btn_message.setOnClickListener {
  var intent = Intent(Intent.ACTION_SENDTO)
  intent.data = Uri.parse("smsto:${user!!.phone_number}")
  intent.putExtra("sms_body", "")
  startActivity(intent)
}
  1. 启动系统权限设置页面
startActivityForResult(
   Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
       .setData(Uri.fromParts("package", packageName, null)),7534
)
  1. 启动应用市场
// 跳转应用市场下载 wps
var uri = Uri.parse("market://details?id=cn.wps.moffice_eng")
var intent = Intent(Intent.ACTION_VIEW, uri)
if (intent.resolveActivity(getPackageManager()) != null) {
    startActivity(intent)
} else {
    //要调起的应用不存在时的处理
    Log.e("TAG","应用市场不存在,不能下载 WPS ")
}
  1. 使用 WPS 打开文件
fun openFile(context: Context, fileUrl: String?, fileType:String?): Boolean {
   if ("jpg".equals(fileType) || "jpeg".equals(fileType) || "gif".equals(fileType) || "png".equals(fileType)) {
       ToastUtils.showToast(context, "文件类型错误")
   } else {
       //检测是否安装了wps软件,没有安装则去下载
       if (isAvuliable(context, "cn.wps.moffice_eng")) {
           val intent = context.getPackageManager().getLaunchIntentForPackage("cn.wps.moffice_eng")
           val bundle = Bundle()

           // 这里采用传入文档的在线地址进行打开,免除下载的步骤,也不需要判断安卓版本号
           intent.setData(Uri.parse(fileUrl))
           intent.putExtras(bundle)
           context.startActivity(intent)

       } else {
           // 跳转应用市场下载 wps
           var uri = Uri.parse("market://details?id=cn.wps.moffice_eng")
           var intent = Intent(Intent.ACTION_VIEW, uri)
           if (intent.resolveActivity(context.getPackageManager()) != null) {
               context.startActivity(intent)
           } else {
               // 要调起的应用不存在时的处理
               ToastUtils.showToast(context, "请先下载 WPS 后再点击打开")
           }
       }
   }
   return true
}


private fun isAvuliable(context: Context, packageName: String): Boolean {
   var packageManager = context.packageManager
   var packageInfo = packageManager.getInstalledPackages(0)
   packageInfo.forEach {
       if (it.packageName.equals(packageName, true)) {
           return true
       }
   }
   return false
}

ps:其实有其他面向对象语言,入门 kotlin 真的很快,尤其是有 Java 基础。配合 菜鸟教程,哪里不会查哪里,基本就能入门了。