기계적 인조 인간
1. android/app/src/main/java/com/<projectname>/
은 <모듈 파일> 폴더 만들기OpenSettingsModule.java
![3911678 - fcf06bcc4528696c.png](https://upload-images.jianshu.io/upload_images/3911678-fcf06bcc4528696c.png)
파일 디렉토리를 생성
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 폴더 (우리의 모듈 가입을)를 <패키지 파일> 만들기
上面的模块功能可以通过调用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
![3911678-33f94b361406b457.png](https://upload-images.jianshu.io/upload_images/3911678-33f94b361406b457.png)
귀하의 빨간색 상자, 그것은 즐거운 놀라움이다
당신이 단계를 놓치고 있기 때문에, 즉, 다음과 같은 작업입니다. 함께 Android Studio
열어 루트 프로젝트 android
다음 폴더를 Build
다시하고 Rebuild Project
, 그 결과 apk
패키지가 설치되어 다시 오픈, 문제에게 그것을 없을 것이다.
![3911678-9017f2840d198802.png](https://upload-images.jianshu.io/upload_images/3911678-9017f2840d198802.png)
안드로이드 Studio에서 프로젝트를 다시 빌드
![3911678 - e69fb005a2ea7492.png](https://upload-images.jianshu.io/upload_images/3911678-e69fb005a2ea7492.png)
결과
![3911678-1157d68618494ae6.png](https://upload-images.jianshu.io/upload_images/3911678-1157d68618494ae6.png)
그 결과, 매우 행복.
에 마지막으로, 덕분에 블로그의 큰 형님
HTTPS : //www.jianshu.com/p/2fe421ec29d7 재현