我需要切换从反应本机活动到原生安卓活动按钮点击事件从JS文件。我已经搜了很多了。请帮帮我。
发布于 2016-03-15 08:46:43
为本地android活动创建一个意图筛选器
<activity>
<intent-filter>
<data android:scheme="my.special.scheme" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT"></category>
</intent-filter>
</activity>使用链接openURL api。
Linking.openURL('my.special.scheme://other/parameters/here')发布于 2016-03-15 09:15:23
您可以创建一个模块并向JS公开一个ReactMethod,这将为您打开该活动。
public class RctActivityModule extends ReactContextBaseJavaModule {
public static final String REACT_CLASS = "RctActivity";
public RctActivityModule(ReactApplicationContext reactContext) {
super(reactContext);
}
@Override
public String getName() {
return REACT_CLASS;
}
@ReactMethod @SuppressWarnings("unused")
public void startActivity(String extraParam) {
Activity context = ContextProvider.getActivityContext();
if (context != null && !context.isFinishing()) {
Intent rctActivityIntent = new Intent(context, RctActivity.class);
rctActivityIntent.putExtra(RctActivity.EXTRA_PARAM, extraParam);
context.startActivity(rctActivityIntent);
}
}
}别忘了把你的新模块添加到你的包里
public class RCCPackage implements ReactPackage {
@Override
public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
return Arrays.<NativeModule>asList(
new RctActivityModule(reactContext)
);
}
@Override
public List<Class<? extends JavaScriptModule>> createJSModules() {
return Collections.emptyList();
}
@Override
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
...
}
}创建一个表示模块(RctActivity.js)的JS文件。现在,将其放在您的react本机项目的根目录中。
RctActivity.js:
import { NativeModules } from 'react-native';
module.exports = NativeModules.RctActivity;在JavaScript代码(index.js)中,导入RctActivity模块:
import RctActivity from './RctActivity'
并使用如下所公开的方法:RctActivity.startActivity('MyExtraParam');
编辑:为了打开一个新的活动,我必须保持对当前正在运行的活动的引用。所以我用了这个小帮手类:
public class ContextProvider {
private static WeakReference<Activity> sActivityWR;
public static void setActivityContext(Activity activity) {
if (sActivityWR == null) {
sActivityWR = new WeakReference<>(activity);
}
}
public static Activity getActivityContext() {
return sActivityWR != null ? sActivityWR.get() : null;
}
public static void clearActivityContext() {
if (sActivityWR != null) {
sActivityWR.clear();
}
sActivityWR = null;
}
}要使用它,请将其连接到基本活动onResume和onPause方法:
public class RctActivity extends com.facebook.react.ReactActivity {
@Override
protected void onResume() {
Log.v(getTag(), "onResume");
ContextProvider.setActivityContext(this);
super.onResume();
}
@Override
protected void onPause() {
Log.v(getTag(), "onPause");
ContextProvider.clearActivityContext();
super.onPause();
}
}不要忘记现在您的MainActivity需要扩展RctActivity
https://stackoverflow.com/questions/36005461
复制相似问题