可以通過此方法喚醒內置應用 如設置麸拄、電話簿.....或者調用三方應用
android喚醒
android 喚醒APP需要原生支持,通過包名來喚醒APP
-
新建如下一個文件夾(openApp)和文件(CustomerOpenAppPackage.java组题,OpenAppModule.java)
image.png OpenAppModule.java中寫入
package 你的目錄.openApp;
import android.content.Intent;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.Promise;
import com.facebook.react.uimanager.IllegalViewOperationException;
public class OpenAppModule extends ReactContextBaseJavaModule {
private ReactApplicationContext Context;
public OpenAppModule(ReactApplicationContext reactContext) {
super(reactContext);
this.Context=reactContext;
}
@Override
public String getName() {
return "OpenApp";
}
@ReactMethod
public void open(String packageName,Promise promise) {
try {
Intent intent = this.Context.getPackageManager().getLaunchIntentForPackage(packageName);
if(intent !=null){
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
this.Context.startActivity(intent);
promise.resolve("ok");
}
else{
promise.resolve("fail");
}
}
catch (IllegalViewOperationException e){
promise.resolve("fail");
}
}
}
- CustomerOpenAppPackage.java中寫入
package 你的目錄.openApp;
import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class CustomerOpenAppPackage implements ReactPackage {
@Override
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
return Collections.emptyList();
}
@Override
public List<NativeModule> createNativeModules(
ReactApplicationContext reactContext) {
List<NativeModule> modules = new ArrayList<>();
modules.add(new OpenAppModule(reactContext));
return modules;
}
}
- MainApplication.java中注冊, 添加以下內容
......
import com.wallet_dk_rn.openApp.CustomerOpenAppPackage;
.....
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(new MainReactPackage(), new FingerprintAuthPackage(), new RNDeviceInfo(),
...
new CustomerOpenAppPackage());
}
image.png
- 在js中
....
import { NativeModules,Linking,Platform } from 'react-native';
...
// 點擊方法中加入
if (Platform.OS === "android") {
NativeModules.OpenApp.open("三方app包名,如設置:com.android.settings")
.then(p => {
if (p !== "ok") {
// 沒找到app 跳轉到下載鏈接或者提示用戶app沒安裝
Linking.openURL("")
}
})
}
ios 喚醒
ios比較簡單云矫,通過linking進行三方跳轉
- 添加白名單
修改./ios/你的項目/info.plist
添加以下內容
<key>LSApplicationQueriesSchemes</key>
<array>
<string>跳轉三方的app的 URL Schemes 例如:wexin</string>
</array>
如下圖
image.png
- js代碼中調用
....
import {Linking,Platform } from 'react-native';
...
// 點擊方法中加入
if (Platform.OS === "ios") {
Linking.canOpenURL('weixin://').then(supported => {
// 可以跳轉
if (supported) {
Linking.openURL('weixin://')
} else {
// 不能跳轉 未安裝或者其他錯誤
// 跳轉到下載鏈接或者提示用戶app沒安裝
}
}