Android
1. android/app/src/main/java/com/<projectname>/
Создание <файл модуля> папкаOpenSettingsModule.java
Добавьте следующий код в OpenSettingsModule.java
package com.<projectname>; /** 记得把<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);
}
}
2. android/app/src/main/java/com/<projectname>/
Создать <файл пакета> папку OpenSettingsPackage.java (SIGN для нашего модуля)
上面的模块功能可以通过调用openNetworkSettings函数打开android设置。现在我们需要注册这个模块。
Добавьте следующий код в OpenSettingsPackage.java
package com.<projectname>; /** 记得把<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);
}
}
3. Пакет обеспечивает MainApplication.java
файловый getPackages
процесс
import com.<projectname>.OpenSettingsPackage; /** 自定义的包模块 */
...
@Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
new MainReactPackage(),
new OpenSettingsPackage() /* 在这里添加 */
);
}
Вот в принципе готов, и если ты взываю, как это, вы будете что-то неожиданное
import React, { Component } from 'react'
import { NativeModules, Button } 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>
<Button
onPress={this.openSettings}
title="打开设置"
color="#841584"
/>
<View/>
)
}
}
При нажатии на эту кнопку, вы увидите красную рамку,null is not an object
Потому что вы пропустили шаг, то есть следующая операция. С Android Studio
открытым проектом в корневой android
папке, а затем Build
снова , а затем Rebuild Project
, в результате apk
установку пакета, повторно открыть, то не было бы никаких проблем его.
Наконец, благодаря большому брату блог
Воспроизводится в: https: //www.jianshu.com/p/2fe421ec29d7