zoukankan      html  css  js  c++  java
  • react-native 跳转到ios/android 权限设置界面

    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);
    });  
    
  • 相关阅读:
    github 访问速度慢 的解决+个人理解
    phpstorm 编辑器进行自动的注释添加
    输入框只能输入数字(最好用)
    数组去重(根据对象属性去重)
    mac安装Homebrew和 tree
    vue中 .sync 的作用
    打包 vue 组件为 webcomponent
    Android开发之SharedPreferences
    Android开发之SharedPreferences扩展以及File
    Android 开发之SQLite基础
  • 原文地址:https://www.cnblogs.com/qiqi715/p/10150964.html
Copyright © 2011-2022 走看看