Android - 资源(resource)转换为String

资源(resource)转换为String


本文地址: http://blog.youkuaiyun.com/caroline_wendy


Android建议资源的动态绑定, 即把string写入资源内, 然后运行动态绑定.
有时须要把资源(resource)ID转换为对应的字符串String.

使用:
String mystring = getResources().getString(R.string.mystring);

就可以.




Android 开发中,将音频文件的 URI 路径转换为字符串表示形式,可以通过 `Uri` 对象的 `getPath()` 或 `toString()` 方法实现。根据 URI 的类型(如 `file://` 或 `content://`),需要采取不同的处理方式以确保获取到正确的路径字符串。 ### URI 转换为字符串路径 对于 `file://` 类型的 URI,可以直接使用 `getPath()` 方法获取文件路径字符串: ```java Uri uri = Uri.fromFile(new File("/sdcard/audio.mp3")); String path = uri.getPath(); // 返回 "/sdcard/audio.mp3" ``` 对于 `content://` 类型的 URI(如通过系统文件选择器获取的 URI),则不能直接通过 `getPath()` 获取实际路径,而是需要通过 `ContentResolver` 查询: ```java private String getPathFromUri(Uri uri, Context context) { String path = null; Cursor cursor = context.getContentResolver().query(uri, null, null, null, null); if (cursor != null) { if (cursor.moveToFirst()) { int columnIndex = cursor.getColumnIndex(MediaStore.Audio.AudioColumns.DATA); if (columnIndex != -1) { path = cursor.getString(columnIndex); } } cursor.close(); } return path; } ``` 此方法适用于音频文件的 URI 转换,基于 `MediaStore.Audio.AudioColumns.DATA` 字段查询实际路径 [^3]。 ### 使用 Uri.decode() 处理编码路径 在某些情况下,URI 中的路径可能被 URL 编码,此时需要使用 `Uri.decode()` 方法进行解码: ```java String encodedPath = uri.getEncodedPath(); String decodedPath = Uri.decode(encodedPath); ``` 该方式适用于处理包含特殊字符的路径字符串 [^4]。 ### 使用 FileProvider 生成可共享的 URI 在 Android 7.0 及以上版本中,若需将文件路径转换为 URI 以供其他应用访问,应使用 `FileProvider`: ```xml <provider android:name="androidx.core.content.FileProvider" android:authorities="${applicationId}.fileprovider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" /> </provider> ``` 在 `res/xml/file_paths.xml` 中定义访问路径: ```xml <?xml version="1.0" encoding="utf-8"?> <paths xmlns:android="http://schemas.android.com/apk/res/android"> <external-path name="external_files" path="." /> </paths> ``` 然后通过以下方式生成 URI: ```java File file = new File(context.getExternalFilesDir(null), "audio.mp3"); Uri uri = FileProvider.getUriForFile(context, context.getPackageName() + ".fileprovider", file); ``` 此方法确保了 URI 的安全性,并适配了 Android 7.0 及以上版本的文件访问限制 [^2]。 ### 总结 - 对于 `file://` 类型的 URI,使用 `getPath()` 可直接获取字符串路径。 - 对于 `content://` 类型的 URI,需通过 `ContentResolver` 查询获取实际路径。 - 若路径被编码,应使用 `Uri.decode()` 解码。 -Android 7.0 及以上版本中,推荐使用 `FileProvider` 生成安全的 URI。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值