自己的生活自己做主?反正我是东一榔头西一棒子的在IT的海洋中乱闯中…
同学有一个英文版的ForRunner245,抱怨说每次手机上来的消息都是问号,我说这个我可以试试解决。因此,这几天一直在研究如何将手机发来的汉字在英文手表上显示出来(之前说过汉化的事情)。技术路线已经有了,并且实现了,这个以后弄好了再说。因为呢,同学的手机是苹果的,我还得研究在苹果上怎么弄。(我因为讨厌苹果的技术做法,一直没弄过苹果的东西)
读取字模矩阵遇到的存贮读写权限问题
由于手表的内存不大(这个不是主要原因),以及佳明使用的MonekyC SDK对存贮支持的局限性(这个是主要原因), 将汉字库考到手表上的方案暂时搁置,准备采用将汉字字模数据直接发送到手表上的方案。这个方案的优劣暂不考虑,这个需要在手机上对文件进行读操作。由于手机的特殊性,对安全的级别要求比较高,因此Google 对Android的权限使用做了各种限定。使用ChatGPT 获得了读写权限的方法,需要设置 AndroidManifest.xml文件 如下
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
val PERMISSION_REQUEST_CODE = 1
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE), PERMISSION_REQUEST_CODE)
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
when (requestCode) {
PERMISSION_REQUEST_CODE -> {
if ((grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
// Permission granted, proceed with file access
} else {
// Permission denied, handle the case
}
return
}
else -> {
// Ignore other requests
}
}
}
照着做之后,在运行中仍然不能是访问被拒,耗时半天不能得解。后来只好再用原始手段,使用搜索引擎得到下来方案。
requestLegacyExternalStorage 参数设置 相关
具体参阅
有关手机存贮权限
里面设计API版本和参数requestLegacyExternalStorage 的设置问题,AI解释如下
requestLegacyExternalStorage 是一个 AndroidManifest.xml 中的参数,用于 Android 10(API 级别 29)的应用,以便继续使用传统的外部存储访问方式。以下是对该参数的详细解释和使用场景:
背景
从 Android 10 开始,Android 引入了 Scoped Storage,限制了应用对设备外部存储的访问权限。这一变化旨在提高用户数据的隐私和安全性。具体来说,应用只能访问其私有目录和特定媒体类型的文件(如图片、视频、音频),而无法像以前那样随意访问整个外部存储。
requestLegacyExternalStorage 参数
为了让现有的应用在适配 Scoped Storage 之前继续正常运行,Android 提供了 requestLegacyExternalStorage 参数。将该参数设置为 true,可以让应用在 Android 10 上继续使用传统的外部存储访问方式。
使用方法
在 AndroidManifest.xml 中,将 requestLegacyExternalStorage 参数设置为 true:
<manifest ... >
<application
android:requestLegacyExternalStorage="true"
... >
...
</application>
</manifest>
使用场景
现有应用的兼容性:
如果你的应用在 Android 10 之前的版本上使用了大量的外部存储访问代码,并且短期内无法完成对 Scoped Storage 的适配,可以使用这个参数以确保应用在 Android 10 上仍能正常工作。
临时解决方案:
在逐步迁移到 Scoped Storage 期间,可以暂时使用这个参数,以便有更多时间重构代码并适配新的存储模型。
文件管理应用:
某些文件管理类应用需要广泛访问外部存储中的文件。在这些应用适配 Scoped Storage 的复杂需求之前,可以使用此参数以维持功能完整性。
因此对于一个比较传统的开发者而言,新技术在没有掌握的时候,传统的方法还是必须的。上面提到的 Scoped Storage 的使用,我还没有用过,后面看看。
maraSun BJFWDQ