Skip to main content

React Native: How To Open App Settings Page

 

React Native: How To Open App Settings Page

React Native has a Linking module to manage the interaction with other applications in the device. In this article, I will explain how you can open “Application Setting Page” of the device using.

Sample Case

Before I explain how to do this, I’ll talk about an example case where we might need this:

You need to get location permission within the application from a user using an iOS operating system and you asked for permission. But user did not agree to grant this permission the first time. In this case, you cannot ask your user for location permission the second time. In this case, the only thing to do is to direct the user to the settings page of our application and make it manually allow it.

Now that we have explained our example situation, we can move on to how we can redirect our user to the “settings page of our application”.

Open App Settings Page

iOS

If our user is using an iOS operating system, we can handle the whole process with a single line of code.

import { Linking } from 'react-native'Linking.openURL('app-settings:')

When we run the above code, our user will be successfully directed to the settings page. On this page, you can view all settings related to our application.

Android

But when it comes to the Android operating system, our one-line code above unfortunately doesn’t work. In this case, we should use another way.

On the Android side, we will launch an Activity using the library called IntentLauncher. But first of all, we need the package-name of our application. We’ll go through the following ways to learn our package-name:

Finding package-name using Expo:

  • First of all, we install the required package:
expo install expo-constants
  • Then import the package we installed into the component we will use and define our variable named pkg.
import Constants from 'expo-constants'const pkg = Constants.manifest.releaseChannel
? Constants.manifest.android.package
: 'host.exp.exponent'

If we are using expo application, our package name will be host.exp.exponent. If we are using the published version of our application (standalone build) then we get the package name we defined in the app.json file.

Finding package-name without using Expo:

  • First of all, we install the required package:
npm install --save react-native-device-info
  • Then import the package we installed into the component we will use and define our variable named pkg.
import DeviceInfo from 'react-native-device-info';const pkg = DeviceInfo.getBundleId();

Now that we know package-name of our application, we have to start an Activity using it. For this, we will use the package called IntentLauncher.

Adding the IntentLauncher library to our project using Expo:

  • First of all, we install the required package:
expo install expo-intent-launcher
  • Then import the package we installed into the component we will use:
import * as IntentLauncher from 'expo-intent-launcher'

To add IntentLauncher library to our project without using Expo:

  • First of all, we install the required package:
npm install react-native-intent-launcher
  • Then linking process:
react-native link react-native-intent-launcher
  • And finally, import the package we installed into the component we will use:
import IntentLauncher, { IntentConstant } from 'react-native-intent-launcher'

We now have the pkg variable (our app’s package name) and the library we will use to start a new Activity. Now we need to start Activity.

Launching an Activity Using Expo

IntentLauncher.startActivityAsync(
IntentLauncher.ACTION_APPLICATION_DETAILS_SETTINGS,
{ data: 'package:' + pkg }
)

Launching an Activity Without Using Expo

IntentLauncher.startActivity({
action: 'android.settings.APPLICATION_DETAILS_SETTINGS',
data: 'package:' + pkg
})

Now, we can direct our users who use both iOS and Android operating systems to the settings page of our application. If we look at the final version of code:

With Expo:

import Constants from 'expo-constants'
import * as IntentLauncher from 'expo-intent-launcher'
const pkg = Constants.manifest.releaseChannel
? Constants.manifest.android.package
: 'host.exp.exponent'
const openAppSettings = () => {
if (Platform.OS === 'ios') {
Linking.openURL('app-settings:')
} else {
IntentLauncher.startActivityAsync(
IntentLauncher.ACTION_APPLICATION_DETAILS_SETTINGS,
{ data: 'package:' + pkg },
)
}
}

Without Expo:

import DeviceInfo from 'react-native-device-info';
import IntentLauncher, { IntentConstant } from 'react-native-intent-launcher'
const pkg = DeviceInfo.getBundleId();const openAppSettings = () => {
if (Platform.OS === 'ios') {
Linking.openURL('app-settings:')
} else {
IntentLauncher.startActivity({
action: 'android.settings.APPLICATION_DETAILS_SETTINGS',
data: 'package:' + pkg
})
}
}

If you have any questions or anything else please do not hesitate to get in touch. With health …, Please mention in comment.

Comments

Popular Posts

How I Reduced the Size of My React Native App by 85%

How and Why You Should Do It I borrowed 25$ from my friend to start a Play Store Developer account to put up my first app. I had already created the app, created the assets and published it in the store. Nobody wants to download a todo list app that costs 25mb of bandwidth and another 25 MB of storage space. So today I am going to share with you how I reduced the size of Tet from 25 MB to around 3.5 MB. Size Matters Like any beginner, I wrote my app using Expo, the awesome React Native platform that makes creating native apps a breeze. There is no native setup, you write javascript and Expo builds the binaries for you. I love everything about Expo except the size of the binaries. Each binary weighs around 25 MB regardless of your app. So the first thing I did was to migrate my existing Expo app to React Native. Migrating to React Native react-native init  a new project with the same name Copy the  source  files over from Expo project Install all de...

How to recover data of your Android KeyStore?

These methods can save you by recovering Key Alias and Key Password and KeyStore Password. This dialog becomes trouble to you? You should always keep the keystore file safe as you will not be able to update your previously uploaded APKs on PlayStore. It always need same keystore file for every version releases. But it’s even worse when you have KeyStore file and you forget any credentials shown in above box. But Good thing is you can recover them with certain tricks [Yes, there are always ways]. So let’s get straight to those ways. 1. Check your log files → For  windows  users, Go to windows file explorer C://Users/your PC name/.AndroidStudio1.4 ( your android studio version )\system\log\idea.log.1 ( or any old log number ) Open your log file in Notepad++ or Any text editor, and search for: android.injected.signing and if you are lucky enough then you will start seeing these. Pandroid.injected.signing.store.file = This is  file path where t...

Video Calling In IOS Objective C

Video Calling Sources Project homepage on GIT — https://github.com/QuickBlox/quickblox-ios-sdk/tree/master/sample-videochat-webrtc Download ZIP - https://github.com/QuickBlox/quickblox-ios-sdk/archive/master.zip Overview The VideoChat code sample allows you to easily add video calling and audio calling features into your iOS app. Enable a video call function similar to FaceTime or Skype using this code sample as a basis. It is built on the top of WebRTC technology.            System requirements The QuickbloxWebRTC.framework supports the next:     * Quickblox.framework v2.7 (pod QuickBlox)     * iPhone 4S+.     * iPad 2+.     * iPod Touch 5+.     * iOS 8+.     * iOS simulator 32/64 bit (audio might not work on simulators).     * Wi-Fi and 4G/LTE connections. Getting Started with Video Calling API Installation with CocoaPods CocoaPods is a dependency manag...