起因是,我想保存一个 golang 代码源文件到 Android 手机上,方便在等车的时候继续阅读代码。但是我发现 Android 系统上居然没有一个类似纯文本编辑器的 app,小米系统内置的阅读器排版混乱,且无法编辑,默认诱导去下载 WPS。所以我想实现一个简单的纯文本编辑器,方便打开各类源码文件。
以下是 ChatGPT 给出的提示,暂未测试,存档一下。
文件类型与编辑器关联
在 Kotlin 中,可以使用以下代码来关联文件类型和编辑器:
val mimeType = "application/pdf" //要关联的文件类型
val packageName = "com.adobe.reader" //要使用的编辑器的包名
//创建一个Intent对象,用于打开指定文件类型的操作
val intent = Intent(Intent.ACTION_VIEW)
intent.type = mimeType
//通过包名指定要使用的编辑器
val pm = context.packageManager
val packageInfo = pm.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES)
if (packageInfo != null) {
val componentName = packageInfo.activities[0].componentName
intent.setClassName(componentName.packageName, componentName.className)
}
//注册关联文件类型和编辑器的操作
val resolver = context.contentResolver
resolver.update(
MediaStore.Files.getContentUri("external"),
ContentValues().apply {
put(MediaStore.Files.FileColumns.MIME_TYPE, mimeType)
put(MediaStore.Files.FileColumns.IS_PENDING, 1)
putNull(MediaStore.Files.FileColumns.DISPLAY_NAME)
},
"${MediaStore.Files.FileColumns.MIME_TYPE}=?",
arrayOf(mimeType)
)
//打开系统的文件选择器,让用户选择要关联的文件
val launcher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == RESULT_OK) {
//获取用户选择的文件的URI
val uri = result.data?.data
if (uri != null) {
resolver.openFileDescriptor(uri, "w", null)?.use {
FileOutputStream(it.fileDescriptor).use { outputStream ->
outputStream.write(ByteArray(0))
}
}
//将文件与编辑器关联起来
val values = ContentValues().apply {
put(MediaStore.Files.FileColumns.IS_PENDING, 0)
}
resolver.update(uri, values, null, null)
}
}
}
//启动系统的文件选择器
launcher.launch(intent)
以上代码会首先创建一个 Intent
对象,并将其类型设置为要关联的文件类型。接着会使用包名指定要使用的编辑器,并通过内容提供程序 API 将文件与编辑器关联起来。
最后,代码会打开系统的文件选择器,让用户选择要关联的文件。当用户选择了文件后,代码会将文件与编辑器关联起来。
golang 代码文件的 mimeType 是什么
Golang 代码文件的 MIME 类型是 text/x-go
。在 HTTP 协议中,MIME 类型用于指示要传输的数据类型,以便接收方可以正确地处理该数据。对于 Golang 代码文件来说,由于它们是纯文本文件,因此其 MIME 类型为 text
,而 x-go
表示它们是 Golang 代码文件。
在 Go 语言中,我们可以使用标准库 net/http
中的 DetectContentType
函数来检测文件的 MIME 类型。例如:
package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func main() {
// 读取文件内容
fileContent, err := ioutil.ReadFile("main.go")
if err != nil {
panic(err)
}
// 检测 MIME 类型
mimeType := http.DetectContentType(fileContent)
fmt.Println(mimeType) // 输出: text/x-go
}
以上代码会读取当前目录下的 main.go
文件,并使用 http.DetectContentType
函数检测其 MIME 类型,并将结果打印到控制台上。
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式