快一個月沒更新博文了,最近業餘時間在寫 Flutter_WanAndroid 項目以及一個小程序。後續都會更新博文介紹項目中遇到的問題和解決辦法。這裏先分享下最近在公司項目上使用 Kotlin 開發使用的一些工具類。
- 調用拍照
- 撥打電話、發送短信
- 啓動系統權限設置頁面
- 啓動應用市場
- 使用 WPS 打開文件
- 調用拍照
新建 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) {
// 處理返回的結果
}
}
}
- 撥打電話、發送短信
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)
}
- 啓動系統權限設置頁面
startActivityForResult(
Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
.setData(Uri.fromParts("package", packageName, null)),7534
)
- 啓動應用市場
// 跳轉應用市場下載 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 ")
}
- 使用 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 基礎。配合 菜鳥教程,哪裏不會查哪裏,基本就能入門了。