Package Exports
- react-native-system-settings-ts
- react-native-system-settings-ts/SystemSetting.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (react-native-system-settings-ts) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
react-native-system-setting-ts
System setting APIs for iOS and Android
This library is a fork of react-native-system-setting that addresses the new NativeEventEmitter() warning.
Support
- Volume (with listener)
- Brightness
- Wi-Fi switch
- Location
- Bluetooth
- Airplane
Note
Example only works on a real device
Change Log
Breaking change for permission since V1.5.0,
see Android Permission
How it looks

Install
Using npm:
npm install react-native-system-setting --saveor using yarn:
yarn add react-native-system-settingLink
If using react-native < 0.60, run react-native link to link this library.
iOS
todo: confirm this
Add pod 'RCTSystemSetting', :path => '../node_modules/react-native-system-setting' in Podfile for Cocoapods.
If linking with react-native link did not work, you can do
it manually.
Android
If linking with react-native link did not work, you can do it manually by following these steps:
android/settings.gradle
include ':react-native-system-setting'
project(':react-native-system-setting').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-system-setting/android')android/app/build.gradle
dependencies {
...
compile project(':react-native-system-setting')
}android/app/src/main/java/..packageName../MainApplication.java
At the top of the file, import react-native-system-setting:
import com.ninty.system.setting.SystemSettingPackage;Add the SystemSettingPackage class to your list of exported packages.
class MainApplication extends Application implements ReactApplication {
// ...
@Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
new MainReactPackage(),
new SystemSettingPackage()
);
}
}Usage
Common import
import SystemSetting from 'react-native-system-setting'Volume
// get the current volume
SystemSetting.getVolume().then((volume) => {
console.log('Current volume is ' + volume);
});
// change the volume
SystemSetting.setVolume(0.5);
// listen the volume changing if you need
const volumeListener = SystemSetting.addVolumeListener((data) => {
const volume = data.value;
console.log(volume);
});
// remove listener when you need it no more
SystemSetting.removeVolumeListener(volumeListener)
setVolumecan do more, more detail
Brightness
// get the current brightness
SystemSetting.getBrightness().then((brightness) => {
console.log('Current brightness is ' + brightness);
});
// change the brightness & check permission
SystemSetting.setBrightnessForce(0.5).then((success) => {
!success && Alert.alert('Permission Deny', 'You have no permission changing settings', [
{'text': 'Ok', style: 'cancel'},
{'text': 'Open Setting', onPress: () => SystemSetting.grantWriteSettingPermission()}
])
});
// save the value of brightness and screen mode.
SystemSetting.saveBrightness();
// restore the brightness and screen mode. you can get the old brightness value.
SystemSetting.restoreBrightness().then((oldVal) => {
// if you need
})
// change app's brightness without any permission.
SystemSetting.setAppBrightness(0.5);
SystemSetting.getAppBrightness().then((brightness) => {
console.log('Current app brightness is ' + brightness);
})
setBrightness()&saveBrightness()need permission for Android
Wi-Fi
SystemSetting.isWifiEnabled().then((enable) => {
const state = enable ? 'On' : 'Off';
console.log('Current wifi is ' + state);
})
SystemSetting.switchWifi(() => {
console.log('switch wifi successfully');
})
isWifiEnabled()need permission for Android
switchWifi()is disabled by default for iOS since V1.7.0, enable it
Location
SystemSetting.isLocationEnabled().then((enable) => {
const state = enable ? 'On' : 'Off';
console.log('Current location is ' + state);
})
SystemSetting.switchLocation(() => {
console.log('switch location successfully');
})
switchLocation()is disabled by default for iOS since V1.7.0, enable it
Bluetooth
SystemSetting.isBluetoothEnabled().then((enable) => {
const state = enable ? 'On' : 'Off';
console.log('Current bluetooth is ' + state);
})
SystemSetting.switchBluetooth(() => {
console.log('switch bluetooth successfully');
})
isBluetoothEnabled()need permission for AndroidAll bluetooth-function are disabled by default for iOS since V1.7.0, enable it
Airplane mode
SystemSetting.isAirplaneEnabled().then((enable) => {
const state = enable ? 'On' : 'Off';
console.log('Current airplane is ' + state);
})
SystemSetting.switchAirplane(() => {
console.log('switch airplane successfully');
})
isAirplaneEnabled()will always returntruefor iOS if your device has no SIM card, see detail
switchAirplane()is disabled by default for iOS since V1.7.0, enable it
App System Settings
// open app setting page
SystemSetting.openAppSystemSettings()API
Run example
cd example
yarn
# for iOS
react-native run-ios
# for Android
react-native run-androidiOS
To be app store friendly, APIs for iOS are disabled since V1.7.0, You can enable it in a few steps by following
instructions in iOS.md
Android permission
API
Default permissions were removed in V1.5.0,
see this PR
You need to declare the corresponding permissions in your app's AndroidManifest.xml.
See example AndroidManifest.xml
android/app/src/main/AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="YourPackageName"
android:versionCode="1"
android:versionName="1.0">
<!-- setBrightness() & setScreenMode() & saveBrightness() -->
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<!-- isWifiEnabled() -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<!-- isBluetoothEnabled() -->
<uses-permission android:name="android.permission.BLUETOOTH"/>
<!-- * switchWifiSilence() -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<!-- * switchBluetoothSilence() -->
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<!-- ... -->
</manifest>There are some different APIs that end with
silence. They can do the job programmatically without direct user consent. These APIs may be useful when you develop a system management app. You should callswitchWifi()&switchBluetooth()to get a better user experience
Do Not Disturb
setVolume() may cause a crash: Not allowed to change Do Not Disturb state.
See detail.
Runtime permission for Android 6+
Change brightness and screen mode need android.permission.WRITE_SETTINGS which user can disable it in Android
settings. When you call setScreenMode(), setBrightness() or setBrightnessForce() , it will return false if the
app has no permission, and you can call SystemSetting.grantWriteSettingPermission() to guide user to app setting page.
There is also a SystemSetting.checkWriteSettingsPermissions() API to check if the app has WRITE_SETTINGS permission.
If you just want to change app's brightness, you can call
setAppBrightness(val), and it doesn't require any permission. see API
Contributions are welcome
Feel free to open issues or pull requests