mirror of
https://github.com/zhigang1992/react-native.git
synced 2026-02-08 09:12:05 +08:00
Open source IntentAndroid
Summary: Move the code to the github folder, add more docs and improve the example. We might want to merge this with `LinkingIOS` later (it has the same functionality plus support for deep links) but want to see how people use the `IntentAndroid` API first (and what other methods we should add) to have more data points. public Reviewed By: lexs Differential Revision: D2646936 fb-gh-sync-id: 751f35784d387efcd031f9b458821cdfde048a54
This commit is contained in:
committed by
facebook-github-bot-6
parent
d5209a0829
commit
ab7b3b2dea
@@ -0,0 +1,85 @@
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This source code is licensed under the BSD-style license found in the
|
||||
* LICENSE file in the root directory of this source tree. An additional grant
|
||||
* of patent rights can be found in the PATENTS file in the same directory.
|
||||
*/
|
||||
|
||||
package com.facebook.react.modules.intent;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
|
||||
import com.facebook.react.bridge.Callback;
|
||||
import com.facebook.react.bridge.ReactApplicationContext;
|
||||
import com.facebook.react.bridge.ReactContext;
|
||||
import com.facebook.react.bridge.ReactContextBaseJavaModule;
|
||||
import com.facebook.react.bridge.ReactMethod;
|
||||
import com.facebook.react.bridge.JSApplicationIllegalArgumentException;
|
||||
|
||||
/**
|
||||
* Intent module. Launch other activities or open URLs.
|
||||
*/
|
||||
public class IntentModule extends ReactContextBaseJavaModule {
|
||||
|
||||
public IntentModule(ReactApplicationContext reactContext) {
|
||||
super(reactContext);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "IntentAndroid";
|
||||
}
|
||||
|
||||
/**
|
||||
* Starts a corresponding external activity for the given URL.
|
||||
*
|
||||
* For example, if the URL is "https://www.facebook.com", the system browser will be opened,
|
||||
* or the "choose application" dialog will be shown.
|
||||
*
|
||||
* @param URL the URL to open
|
||||
*/
|
||||
@ReactMethod
|
||||
public void openURL(String url) {
|
||||
if (url == null || url.isEmpty()) {
|
||||
throw new JSApplicationIllegalArgumentException("Invalid URL: " + url);
|
||||
}
|
||||
try {
|
||||
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
|
||||
// We need Intent.FLAG_ACTIVITY_NEW_TASK since getReactApplicationContext() returns
|
||||
// the ApplicationContext instead of the Activity context.
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
getReactApplicationContext().startActivity(intent);
|
||||
} catch (Exception e) {
|
||||
throw new JSApplicationIllegalArgumentException(
|
||||
"Could not open URL '" + url + "': " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether or not an installed app can handle a given URL.
|
||||
*
|
||||
* @param URL the URL to open
|
||||
* @param promise a promise that is always resolved with a boolean argument
|
||||
*/
|
||||
@ReactMethod
|
||||
public void canOpenURL(String url, Callback callback) {
|
||||
if (url == null || url.isEmpty()) {
|
||||
throw new JSApplicationIllegalArgumentException("Invalid URL: " + url);
|
||||
}
|
||||
try {
|
||||
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
|
||||
// We need Intent.FLAG_ACTIVITY_NEW_TASK since getReactApplicationContext() returns
|
||||
// the ApplicationContext instead of the Activity context.
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
boolean canOpen =
|
||||
intent.resolveActivity(this.getReactApplicationContext().getPackageManager()) != null;
|
||||
callback.invoke(canOpen);
|
||||
} catch (Exception e) {
|
||||
throw new JSApplicationIllegalArgumentException(
|
||||
"Could not check if URL '" + url + "' can be opened: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -18,6 +18,7 @@ import com.facebook.react.bridge.JavaScriptModule;
|
||||
import com.facebook.react.bridge.NativeModule;
|
||||
import com.facebook.react.bridge.ReactApplicationContext;
|
||||
import com.facebook.react.modules.fresco.FrescoModule;
|
||||
import com.facebook.react.modules.intent.IntentModule;
|
||||
import com.facebook.react.modules.network.NetworkingModule;
|
||||
import com.facebook.react.modules.storage.AsyncStorageModule;
|
||||
import com.facebook.react.modules.toast.ToastModule;
|
||||
@@ -47,6 +48,7 @@ public class MainReactPackage implements ReactPackage {
|
||||
return Arrays.<NativeModule>asList(
|
||||
new AsyncStorageModule(reactContext),
|
||||
new FrescoModule(reactContext),
|
||||
new IntentModule(reactContext),
|
||||
new NetworkingModule(reactContext),
|
||||
new WebSocketModule(reactContext),
|
||||
new ToastModule(reactContext));
|
||||
|
||||
Reference in New Issue
Block a user