2

经过数小时的搜索和测试,我无法通过这个挑战。

我正在尝试从另一个应用程序共享数据(网址、图像)-> 到我的应用程序。

但我无法找到关于如何实现这一点(在 Android 和 iOS 上)或可靠模块的正确文档(react-native-share-extension似乎有点过头了,并且不适用于 react-native-navigation v2(#139)并且不为 iOS 维护react-native-share-menu )

让我们谈谈 Android,我确实更新了我的清单<intent-filter>(顺便说一句,iOS 中的等价物是什么?)

    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="image/*" />
        <data android:mimeType="text/plain" />
    </intent-filter>

并成功在其他应用程序的共享列表中看到我的应用程序...并单击它打开我的应用程序...检查

现在我需要在我的应用程序中实际获取意图数据。我尝试Linking从 react-native 使用,但没有任何成功,我没有得到任何控制台日志。

下面是我的代码,我缺少什么,或者我应该为我的 Android 和 iOS 项目做些什么来获取意图数据?

index.js

import App from './App';

应用程序.js

import { persistStore } from 'redux-persist';
import { Navigation } from "react-native-navigation";
import { Linking } from 'react-native';
// other imports ...
// [...]

const handleOpenURL = (event) => {
  console.log(event.url);
};

Linking.addEventListener('url', handleOpenURL);
Linking.getInitialURL().then((url) => {
    if (url) {
      console.log('Initial url is: ' + url);
    }
  }).catch(err => console.error('An error occurred', err));

Navigation.events().registerAppLaunchedListener(() => {
   persistStore(store, null, () => {
    // Register Screens ...
    Navigation.setRoot({
    // Setting root to home page (home.js)

Home.js // 那里也试过

// imports
class Home extends Component {
//...
   _handleOpenURL(event) {
    console.log(event.url);
   };
   componentDidMount() {
      Linking.addEventListener('url', this._handleOpenURL);
      Linking.getInitialURL().then((url) => {
        if (url) {
            console.log('Initial url is: ' + url);
        }
      }).catch(err => console.error('An error occurred', err));
   }

MainActivity.java // 这可能是我缺少类似 getIntent() 的地方?

package com.my.app;

import com.imagepicker.permissions.OnImagePickerPermissionsCallback;
import com.facebook.react.modules.core.PermissionListener;
import com.reactnativenavigation.NavigationActivity;

public class MainActivity extends NavigationActivity implements OnImagePickerPermissionsCallback {

  private PermissionListener listener;

  @Override
  public void setPermissionListener(PermissionListener listener) {
    this.listener = listener;
  }

  @Override
  public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    if (listener != null) {
      listener.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
  }

}

我在上面的MainActivity上尝试了Dave Bennet的解决方案,但遇到了一个我无法解决的错误(错误:方法没有覆盖或实现超类型的方法)

谢谢你的帮助!

------ 包

  • “反应”:“16.6.3”,
  • “反应原生”:“0.57.8”,
  • “反应原生导航”:“^2.6.0”
4

0 回答 0