React Native Android module to use Android's Intent actions for send text to shareable apps or make phone calls or opening third party apps.
This module is useful when you need to share some text between apps in Android device and if you have a valid phone number make some call directly (if you ask for permission in AndroidManifest.xml).
E.g.: You have and short text and want to share in a SMS or Whatsapp.
npm install react-native-send-intent --save
- Automatically with:
react-native link react-native-send-intent
- In
android/setting.gradle
...
include ':RNSendIntentModule', ':app'
project(':RNSendIntentModule').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-send-intent/android')
- In
android/app/build.gradle
...
dependencies {
...
compile project(':RNSendIntentModule')
}
- Register Module >= 0.29 (in MainApplication.java)
import com.burnweb.rnsendintent.RNSendIntentPackage; // <--- import
public class MainApplication extends Application implements ReactApplication {
......
@Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
new MainReactPackage(),
new RNSendIntentPackage()); // <------ add this line to your MainApplication class
}
......
}
If you need to see the install instructions for older React Native versions look here.
var SendIntentAndroid = require('react-native-send-intent');
SendIntentAndroid.sendText({
title: 'Please share this text',
text: 'Lorem ipsum dolor sit amet, per error erant eu, antiopam intellegebat ne sed',
type: SendIntentAndroid.TEXT_PLAIN
});
var SendIntentAndroid = require('react-native-send-intent');
SendIntentAndroid.sendMail("[email protected]", "Subject test", "Test body");
Thanks to @pedro ;)
var SendIntentAndroid = require('react-native-send-intent');
SendIntentAndroid.sendSms('+55 48 9999-9999', 'SMS body text here');
It's very important ask for permission in your AndroidManifest.xml file if you need to use Phone Calls directly. You can add an optional second parameter, to fix the default phone app.
Please add this line to your XML before using this example:
<uses-permission android:name="android.permission.CALL_PHONE" />
And them you can call in your JavaScript files:
var SendIntentAndroid = require('react-native-send-intent');
SendIntentAndroid.sendPhoneCall('+55 48 9999-9999', true);
For this use you doesn't need to ask any permission. You can add an optional second parameter, to fix the default phone app.
var SendIntentAndroid = require('react-native-send-intent');
SendIntentAndroid.sendPhoneDial('+55 48 9999-9999', false);
According to Google using Intents for inserting, updating, and viewing calendar events is the preferred method. At this time only simple recurrence is supported ['daily'|'weekly'|'monthly'|'yearly'].
Create a Calendar Event:
// Create the Calendar Intent.
SendIntentAndroid.addCalendarEvent({
title: 'Go To The Park',
description: "It's fun to play at the park.",
startDate: '2016-01-25 10:00',
endDate: '2016-01-25 11:00',
recurrence: 'weekly',
location: 'The Park'
});
Check if Gmail app is intalled. Returns a promise with a boolean telling if the app is installed or not
SendIntentAndroid.isAppInstalled('com.google.android.gm').then((isInstalled) => {});
This can be used to upgrade your APK from a custom source or install other apps. No additional permissions are required.
SendIntentAndroid.installRemoteApp('https://example.com/my-app.apk', 'my-saved-app.apk').then((installWasStarted) => {});
Open Gmail app. Returns a promise with a boolean telling if the app was opened or not:
SendIntentAndroid.openApp('com.google.android.gm').then((wasOpened) => {});
// You can also specify arbitrary intent extras to be passed to the app
SendIntentAndroid.openApp('com.mycorp.myapp', {"com.mycorp.myapp.reason": "just because", "com.mycorp.myapp.data": "must be a string"}).then((wasOpened) => {});
Opens MX Player (Free) app and starts a video at the 1 minute mark. Returns a promise with a boolean telling if the app was opened or not:
SendIntentAndroid.openAppWithData("com.mxtech.videoplayer.ad",
"http://download.blender.org/peach/bigbuckbunny_movies/big_buck_bunny_480p_surround-fix.avi",
"video/*", {
position: { type: "int", value: 60 }
}
).then((wasOpened) => {});
Opens Chrome intent as defined in https://developer.chrome.com/multidevice/android/intents
Returns a promise with a boolean.
True if: the intent was handled by an activity or the browser opened the browser_fallback_url
False if both conditions are not fulfilled
SendIntentAndroid.openChromeIntent("intent://www.spm.com/qrlogin#Intent;scheme=https;package=example.package;S.browser_fallback_url=https://www.spm.com/download;end",
}
).then((wasOpened) => {});
SendIntentAndroid.openCalendar();
SendIntentAndroid.openCamera();
SendIntentAndroid.openEmailApp();
SendIntentAndroid.openDownloadManager();
Opens Androids default share tray:
// Create Share With dialog.
SendIntentAndroid.openChooserWithOptions({
subject: 'Story Title',
text: 'Message Body'
}, 'Share Story');
SendIntentAndroid.openChooserWithOptions({
subject: 'Video Title',
videoUrl: '/path_or_url/to/video.mp4'
}, 'Share video to');
Opens Androids default share tray:
// Create Multiple Files Share With dialog.
SendIntentAndroid.openChooserWithMultipleOptions([{
subject: 'Video One Title',
videoUrl: '/path_or_url/to/video.mp4',
},
{
subject: 'Video Two Title',
videoUrl: '/path_or_url/to/video2.mp4',
}],'Share videos to');
SendIntentAndroid.openChooserWithMultipleOptions([{
subject: 'Video Title',
text: 'Test shared with video',
},
{
subject: 'Video Title',
videoUrl: '/path_or_url/to/video.mp4',
}],'Share video to');
Opens Androids default maps app with location:
// Open Maps App
SendIntentAndroid.openMaps('Piccadilly Circus Station, London, United Kingdom');
Opens Androids default maps app, and route path between your location and address:
mode: d,w,b
- d: drive car
- w: walking
- b: bicycle
SendIntentAndroid.openMapsWithRoute('Piccadilly Circus Station, London, United Kingdom', "w");
SendIntentAndroid.isAppInstalled('jp.naver.line.android')
.then(function(isInstalled){
if(!isInstalled){
//LINE has not install, you need to install it!
return;
}
SendIntentAndroid.shareTextToLine({text: "txt message that you want to share"});
});
when you call SendIntentAndroid.shareTextToLine this method, app will bring txt message to LINE, and you can select one or multiple friends to share.
import { CameraRoll } from 'react-native';
//get frist image from CameraRoll
CameraRoll.getPhotos({first: 1}).then(
function(data){
const assets = data.edges
SendIntentAndroid.isAppInstalled('com.instagram.android')
.then(function(isInstalled){
if(!isInstalled){
//Instagram has not install
return;
}
SendIntentAndroid.shareImageToInstagram("image/*", encodeURI(assets[0].node.image.uri));
});
},
function(err){
console.error('An error occurred', err)
}
);
Share your first image from CameraRoll to Instagram.
Opens a specified settings screen when passed one of the constant values available in android.provider.settings
(use the constant value found here to open the Security Settings screen).
SendIntentAndroid.openSettings('android.settings.SECURITY_SETTINGS');
Please add this line to your AndroidManifest.xml file before using next example:
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
SendIntentAndroid.getVoiceMailNumber().then(voiceMailNumber => {
if (!voiceMailNumber) {
return console.error('Can`t get voiceMailNumber');
}
//if u want to use next line, u need to add CALL_PHONE permission
SendIntentAndroid.sendPhoneCall(voiceMailNumber);
});
Opens Android chooser so the user can select which app will handle the file
SendIntentAndroid.openFileChooser({
subject: 'File subject', //optional,
fileUrl: '/path_or_url/to/file',
type: 'file_mimetype'
}, 'Open file with:')
Opens Android own file selector to get the selected file and callback path from Uri
SendIntentAndroid.openFilePicker({
type: 'file_mimetype', //default is "*/*"
title: 'selector title', //default is "Choose File"
}, (filePath)=>{})
Please add this lines to your AndroidManifest.xml file before using next example:
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
SendIntentAndroid.getPhoneNumber().then(phoneNumber => {
if (!phoneNumber) {
return console.error('Can`t get phoneNumber');
}
//do something with number
});
MIT