ギャラリーから画像を共有するために、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 にディスパッチできません。
この問題を解決するにはどうすればよいですか?