【发布时间】:2019-04-08 11:14:54
【问题描述】:
我已经在我的 react-native 项目的 android 部分成功实现了接收共享意图处理。现在我想对 iOS 部分做同样的事情。
为了更好地了解我在 android 中做了什么,以及我在 iOS 中想要什么。为了清楚起见,我将展示一些代码 sn-ps。我不确定 iOS 世界中的所有术语都叫什么,因此很难搜索知识/示例。希望 SO 上的某个人知道这两个平台并且可以将 android 翻译成 iOS 术语?
为了让我的应用出现在原生 android 的“分享方式”菜单中,我将这些意图过滤器添加到了我的 AndroidManifest.xml
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
这允许用户标记一些文本,我的案例 url,并直接将 url 共享到我的应用程序。为了将该共享 url 传递给 react-native 部分,我在 MainActivity.kt 中添加了以下内容(也可以是 java)
class MainActivity : ReactActivity() {
override fun createReactActivityDelegate(): ReactActivityDelegate {
return object : ReactActivityDelegate(this, mainComponentName) {
override fun getLaunchOptions(): Bundle? {
return gerenateBundleFromIntent(intent)
}
}
}
private fun gerenateBundleFromIntent(intent: Intent) : Bundle {
val bundle = Bundle()
when {
intent?.action == Intent.ACTION_SEND -> {
if ("text/plain" == intent.type) {
intent.getStringExtra(Intent.EXTRA_TEXT)?.let {
bundle.putString("shareUrl", it)
}
}
} else -> {
// Handle other intents, such as being started from the home screen
}
}
return bundle
}
}
putString("shareUrl", it) 将成为一个名为 shareUrl 的 react-native 属性
这允许我在我的 react-native 代码 (app.js) 中接收数据,如下所示:
export default class App extends Component<Props> {
constructor(props) {
super(props)
this.state = {
uri: undefined,
shareUrl: this.props.shareUrl
}
}
...
}
如果可能的话,我希望能够以类似的方式在 iOS 设备上共享一个 url,给这个应用程序,并将该 url 传递给我的 react-natve App.js 的 shareUrl 属性
从哪里开始?这些是 react-native cli 生成的 iOS 目录,我需要在哪些文件中添加什么?
【问题讨论】:
标签: android ios react-native