8

ギャラリーから画像を共有するために、react-native-share-extensionを使用しています。そのため、2 つのアクティビティ (MainActivity と ShareActivity) を使用します。

しかし、ShareActivity が終了すると、メイン アプリからの反応はありません。すべての UI コンポーネントが停止します。

Android モニター メッセージには、「Catalyst インスタンスがアタッチされていないため、タッチを JS にディスパッチできません」というメッセージが表示される

私のコードは以下です。

AndroidManifest.xml

<activity
    android:noHistory="true"
    android:name=".share.MyShareActivity"
    android:configChanges="orientation"
    android:label="@string/title_activity_share"
    android:screenOrientation="portrait"
    android:launchMode="standard"
    android:theme="@style/Theme.Share.Transparent" >
   <intent-filter>
     <action android:name="android.intent.action.SEND" />
     <category android:name="android.intent.category.DEFAULT" />
     <data android:mimeType="*/*" />
   </intent-filter>
</activity>

MyShareActivity.java

package com.mobileopenalm.share;

import android.app.Activity;
import android.os.Bundle;

import com.facebook.react.ReactActivity;
import com.github.alinz.reactNativeShareExtension.ShareExActivity;
import com.mobileopenalm.BuildConfig;


public class MyShareActivity extends ReactActivity {
    static MyShareActivity myActivity = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        myActivity = this;
    }

    @Override
    protected String getMainComponentName() {
        return "MyShareEx";
    }

    @Override
    protected boolean getUseDeveloperSupport() {
        return BuildConfig.DEBUG;
    }

    static protected MyShareActivity getActivity(){
        return myActivity;
    }
}

InternalShare.java(reactMethod を宣言)

public class InternalShare extends ReactContextBaseJavaModule {
        public InternalShare(ReactApplicationContext reactContext) {
            super(reactContext);
        }

        @Override
        public String getName() {
            return "ShareExtension";
        }

        @ReactMethod
        public void close() {
            MyShareActivity.getActivity().finish();
        }

        @ReactMethod
        public void data(Callback successCallback){
//            WritableMap map = Arguments.createMap();

            Intent intent = getCurrentActivity().getIntent();
            String action = intent.getAction();
            String type = intent.getType();
            String[] value = null;

            if (type == null) {
                type = "";
            }

            //if you want to support more, just add more things here.
            //at the moment we are only supporting browser URL
            if (Intent.ACTION_SEND.equals(action)) {

                ClipData c = intent.getClipData();
                int count = c.getItemCount();
                value  = new String[count];
                for(int i = 0; i < count ; i++){
                    value[i] = c.getItemAt(i).getUri().toString();
                }
            }

            if(value == null){
                successCallback.invoke("");
            } else {
                successCallback.invoke(value);
            }
        }
    }

share.android.js - close メソッド (Share 拡張機能はここから始まります。)

onClose() {
    // console.log(NativeModules.ShareExtension.data())
    NativeModules.ShareExtension.close();

  },

index.android.js

/**
 * Sample React Native App
 * https://github.com/facebook/react-native
 */
 import Share from './share.android';

 'use strict';

 var { AppRegistry } = require('react-native');
 var App = require('./App/App');
 // var DropDownApp = require('./App/DropDown');


AppRegistry.registerComponent('mobileOpenAlm', () => App);
AppRegistry.registerComponent('MyShareEx', () => Share);

詳細 -

ギャラリーから写真を共有すると、アプリは share.android.js にリダイレクトされました。メインアプリ(mobileOpenAlm)はバックグラウンドに移行します。

share.android.js で onClose() メソッドを使用した後、アプリが正常に終了しました。しかし、メインアプリに戻りましたが、アプリが応答しません。

そしてログは以下です。

Catalyst インスタンスがアタッチされていないため、タッチを JS にディスパッチできません。

この問題を解決するにはどうすればよいですか?

4

0 に答える 0