Android 开发常用的 kotlin 工具方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ITxiaodong/article/details/89502305

快一个月没更新博文了,最近业余时间在写 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 基础。配合 菜鸟教程,哪里不会查哪里,基本就能入门了。

猜你喜欢

转载自blog.csdn.net/ITxiaodong/article/details/89502305