我需要从切换REACT NATIVE活动对从JS文件按钮单击事件原生Android活动。我已经搜索了很多。请帮帮我。如何切换REACT NATIVE js文件到Android活动
回答
您的原生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>
使用Linking openURL API创建的意图过滤器。
Linking.openURL('my.special.scheme://other/parameters/here')
您可以创建一个模块,并暴露ReactMethod
到JS将打开活动为您服务。
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-native项目的根目录中。
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
和方法:
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
无法解析类“RctActivityModule”中的“ContextProvider”。 – Shivang
上下文提供者是我写的一个小帮助类。我将它添加到答案 –
我正在导入js文件: import'./home/ttnd/ReactTestProject/android/app/src/main/java/com/reacttestproject/RctActivity'..... and facing错误......... 要求未知模块“./home/ttnd/ReactTestProject/android/app/src/main/java/com/reacttestproject/RctActivity”。如果您确定该模块在那里,请尝试重新启动打包程序 – Shivang
- 1. 如何样式React Native切换组件?
- 2. 在React-Native中切换TextInputs
- 3. 如何发送从react-native到android活动的值?
- 4. 从React-Native代码调用Android活动
- 5. Android:切换活动!
- 6. React JS v React Native
- 7. Android - 从状态栏切换到活动
- 8. android动画活动切换
- 9. Arduino + Android:如何切换活动
- 10. react-native:引用外部JS文件
- 11. 基于滚动的切换类React JS
- 12. 从活动切换到MapActivity
- 13. 从android移动到ios react-native
- 14. React Native替换bundle.js
- 15. react-native不生成android的文件
- 16. React Native android build
- 17. React Native Android&Genymotion
- 18. Android Studio/React Native
- 19. React Native - initialProperties Android
- 20. 如何终止活动并切换到另一个活动?
- 21. react-native run-android and react-native开始
- 22. React Native中的react-native run-android
- 23. 如何使用React Native下载文件?
- 24. React Native:活动和指标跟踪库?
- 25. Android中的NullPointerException切换活动时
- 26. Android:使用按钮事件切换到另一个活动?
- 27. Android在切换到新活动时崩溃
- 28. React native bundlle js卡住
- 29. 如何切换react-navigation抽屉
- 30. 如何在Android的React-native中包含'.jar'文件?
我已经尝试了很多解决它,2答案也无法解决问题。它应该没有被搁置。 – Shivang