iOS
使用 react-native 中 Linking
- import { Linking } from 'react-native';
- Linking.openURL('app-settings:')
- .catch((err) => console.log('error', err));
- Android
1, 在
Android/App/src/main/java/com/<projectname>
文件夹下创建
opensettings 文件夹
2, 在 opensettings 文件夹下创建模块文件
OpenSettingsModule.java
- (模块功能)
- package com.<projectname>.opensettings; // 记得把 < projectname > 改为你的项目名称
- import Android.App.Activity;
- import Android.content.Intent;
- import com.Facebook.react.bridge.Callback;
- import com.Facebook.react.bridge.ReactApplicationContext;
- import com.Facebook.react.bridge.ReactMethod;
- import com.Facebook.react.bridge.ReactContextBaseJavaModule;
- public class OpenSettingsModule extends ReactContextBaseJavaModule {
- @Override
- public String getName() {
- /**
- * return the string name of the NativeModule which represents this class in JavaScript
- * In JS access this module through React.NativeModules.OpenSettings
- */
- return "OpenSettings";
- }
- @ReactMethod
- public void openNetworkSettings(Callback cb) {
- Activity currentActivity = getCurrentActivity();
- if (currentActivity == null) {
- cb.invoke(false);
- return;
- }
- try {
- currentActivity.startActivity(new Intent(Android.provider.Settings.ACTION_SETTINGS));
- cb.invoke(true);
- } catch (Exception e) {
- cb.invoke(e.getMessage());
- }
- }
- /* constructor */
- public OpenSettingsModule(ReactApplicationContext reactContext) {
- super(reactContext);
- }
- }
上面的模块功能可以通过调用 openNetworkSettings 函数打开 Android 设置.
3, 在 opensettings 文件夹下创建包文件
OpenSettingsPackage.java
- (注册模块 OpenSettingsModule)
- package com.<projectname>.opensettings; // 记得把 < projectname > 改为你的项目名称
- import com.Facebook.react.ReactPackage;
- import com.Facebook.react.bridge.JavaScriptModule;
- import com.Facebook.react.bridge.NativeModule;
- import com.Facebook.react.bridge.ReactApplicationContext;
- import com.Facebook.react.uimanager.ViewManager;
- import java.util.ArrayList;
- import java.util.Collections;
- import java.util.List;
- public class OpenSettingsPackage implements ReactPackage {
- @Override
- public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
- List<NativeModule> modules = new ArrayList<>();
- modules.add(new OpenSettingsModule(reactContext));
- return modules;
- }
- // @Override
- // public List<<Class>? extends JavaScriptModule> createJSModules() {
- // return Collections.emptyList();
- // }
- @Override
- public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
- return Collections.emptyList();
- }
- }
4, 把包提供到
MainApplication.java
文件的 getPackages 方法中:
- import com.<projectname>.opensettings.*; // 还是要修改成自己项目名
- ...
- @Override
- protected List<ReactPackage> getPackages() {
- return Arrays.<ReactPackage>asList(
- new MainReactPackage(),
- ...
- new OpenSettingsPackage() /* <---- add here */
- );
- }
5, 准备工作完成, 接下来调用:
- import { NativeModules } from 'react-native'
- NativeModules.OpenSettings.openNetworkSettings((data) => {
- console.log('call back data', data);
- });
来源: http://www.bubuko.com/infodetail-2892288.html