Android 開發常用的 kotlin 工具方法

快一個月沒更新博文了,最近業餘時間在寫 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 基礎。配合 菜鳥教程,哪裏不會查哪裏,基本就能入門了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章