React Native Share在Android中res.message返回undefined的解决问询
我遇到过同样的问题,以下是可行的解决方法:
1. 优先升级到最新版react-native-share
旧版本的Android端实现未处理分享选项的返回逻辑,先执行升级命令:
npm install react-native-share@latest # 或 yarn add react-native-share@latest
升级后重新编译Android项目,再测试res.message是否能返回选中的分享组件标识(比如com.android.email/.activity.MessageCompose这类格式)。
2. 自定义Android原生模块扩展(升级无效时)
如果升级后仍无法获取,需要修改react-native-share的Android原生代码来返回选中的分享组件:
- 找到项目中
node_modules/react-native-share/android/src/main/java/com/reactlibrary/RNShareModule.java文件 - 定位到
onActivityResult方法,在处理RESULT_OK的分支中,添加获取选中组件的逻辑:
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == SHARE_REQUEST_CODE && promise != null) { if (resultCode == Activity.RESULT_OK) { WritableNativeMap result = new WritableNativeMap(); // 获取选中的分享组件 ComponentName chosenComponent = data.getParcelableExtra(Intent.EXTRA_CHOSEN_COMPONENT); if (chosenComponent != null) { result.putString("message", chosenComponent.flattenToString()); } else { result.putString("message", "unknown"); } promise.resolve(result); } else if (resultCode == Activity.RESULT_CANCELED) { promise.reject("E_CANCELED", "Share canceled"); } else { promise.reject("E_FAILED", "Share failed"); } promise = null; } }
- 注意:直接修改node_modules中的代码会在依赖更新时被覆盖,建议fork官方库并维护自定义版本,或者将该模块复制到本地Android项目目录中作为本地依赖引用。
3. 无需额外修改AndroidManifest.xml
这个问题不需要调整AndroidManifest的权限或配置,默认的Manifest设置即可满足需求。
内容的提问来源于stack exchange,提问作者Allison Lin
相关产品推荐
相关产品推荐

