react-native 打开设置界面

iOS

iOS打开设置还是比较简单的,使用Linking组件即可:

Linking.openURL('app-settings:')
  .catch(err => console.log('error', err))

Android

1、在android/app/src/main/java/com/<projectname>/文件夹下创建opensettings文件夹 2、在这个文件夹下创建模块文件OpenSettingsModule.java(模块功能)和包文件OpenSettingsPackage.java(注册我们的模块)。 3、在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);
  }
}

4、上面的模块功能可以通过调用openNetworkSettings函数打开android设置。现在我们需要注册这个模块。在OpenSettingsPackage.java里填入如下代码:

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();
  }
}

5、把包提供到MainApplication.java文件的getPackages方法中:

import com.<projectname>.opensettings.*; // 还是要修改成自己项目名
...
@Override
protected List<ReactPackage> getPackages() {
  return Arrays.<ReactPackage>asList(
      new MainReactPackage(),
      new OpenSettingsPackage() /* <---- add here */
  );
}

6、准备工作完成,接下来调用:

import { NativeModules } from 'react-native'

export default class App extends Component {
  constructor(props) {
    super(props)
  }

  openSettings() {
    NativeModules.OpenSettings.openNetworkSettings(data => {
      console.log('call back data', data)
    })
  }

  render() {
    return (
      <View style={styles.container}>
        <Text onPress={this.openSettings}>Open Android Settings</Text>
      </View>
    )
  }
}   

这回能开心的打开设置咯~

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏fangyangcoder

基于FPGA的IIR滤波器

                                                        by方阳

1351
来自专栏张善友的专栏

搭建.NET Framework 3.0开发环境 及SharePoint 2007/WSS 3环境

第一步:首先您必须安装.NET Framework 3.0,则可以下载其Redistributable Package Microsoft .NET Frame...

1936
来自专栏施炯的IoT开发专栏

转贴-WP7开发资源大收集

文章作者: jason huang 文章标签: Microsoft, Windows Phone 7, WP7 转贴链接: WP7开发资源大收集 这里收集...

1828
来自专栏逸鹏说道

简析.NET Core 以及与 .NET Framework的关系

简析.NET Core 以及与 .NET Framework的关系 1 .NET Core & .NET Framework 2 .NET Core & ASP...

3477
来自专栏张善友的专栏

RavenDB系列教程

RavenDB是一个在.NET下的文档型数据库,它具有高扩展性,支持MapReduce,提供RESTful的接口。同时它又支持ACID的事务。下面是一个Rave...

1827
来自专栏张善友的专栏

Firebird 数据库资源

Firebird is a database with 20 years of history, full set of features (including...

2278
来自专栏张善友的专栏

.NET 4.0 的Web Form和EF的例子 Employee Info Starter Kit (v4.0.0)

ASP.NET 4.0改进了许多不同的场景集(set of scenarios),如Webforms ,Dynamic Data以及基于AJAX的Web开发。此...

18010
来自专栏张善友的专栏

更新Silverlight ctp到Silverlight beta 1.0

下面是我更新Silverlight ctp到Silverlight beta 1.0的一个纪录,希望对各位同学有帮助。 1、卸载Silverlight ctp ...

1759
来自专栏我和未来有约会

silverlight寻奇 - Graphite

Graphite是一个能自动布局的图表控件。 目前它已经有了silverlight 2 和 wpf的版本。观看demo时按下“Ctrl”键再做点击操作。 原文...

1795
来自专栏张善友的专栏

Mono 2.2 发布了

Mono 2.2 推出新的代码生成引擎,会产生更优质的代码.对 Windows Form 以及其它内容做进一步改进 MONO 2.2 新特性: JIT N...

1747

扫码关注云+社区