首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将本机js文件切换到Android活动

如何将本机js文件切换到Android活动
EN

Stack Overflow用户
提问于 2016-03-15 07:58:21
回答 2查看 2.1K关注 0票数 1

我需要切换从反应本机活动原生安卓活动按钮点击事件从JS文件。我已经搜了很多了。请帮帮我。

EN

回答 2

Stack Overflow用户

发布于 2016-03-15 08:46:43

为本地android活动创建一个意图筛选器

代码语言:javascript
复制
<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。

代码语言:javascript
复制
Linking.openURL('my.special.scheme://other/parameters/here')

链接到示例应用程序工作

票数 2
EN

Stack Overflow用户

发布于 2016-03-15 09:15:23

您可以创建一个模块并向JS公开一个ReactMethod,这将为您打开该活动。

代码语言:javascript
复制
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);
        }
    }
}

别忘了把你的新模块添加到你的包里

代码语言:javascript
复制
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:

代码语言:javascript
复制
import { NativeModules } from 'react-native';
module.exports = NativeModules.RctActivity;

在JavaScript代码(index.js)中,导入RctActivity模块:

import RctActivity from './RctActivity'

并使用如下所公开的方法:RctActivity.startActivity('MyExtraParam');

编辑:为了打开一个新的活动,我必须保持对当前正在运行的活动的引用。所以我用了这个小帮手类:

代码语言:javascript
复制
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;
    }
}

要使用它,请将其连接到基本活动onResumeonPause方法:

代码语言:javascript
复制
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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36005461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档