mirror of
https://github.com/apache/cordova-android.git
synced 2025-02-07 14:53:00 +08:00
feat: handle intent:// scheme links with browser_fallback_url param (#1167)
* fix showWebPage url intent:// now works * android handle external url `intent://` scheme * code refactoring Co-authored-by: Андреянов Александр Николаевич <a.andreyanov@sevstar.net> Co-authored-by: Tim Brust <github@timbrust.de>
This commit is contained in:
parent
c9ab33eded
commit
d22af021ee
@ -19,6 +19,7 @@
|
|||||||
package org.apache.cordova;
|
package org.apache.cordova;
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
|
import android.content.ActivityNotFoundException;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
@ -34,6 +35,7 @@ import org.json.JSONException;
|
|||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
|
import java.net.URISyntaxException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -232,25 +234,37 @@ public class CordovaWebViewImpl implements CordovaWebView {
|
|||||||
LOG.w(TAG, "showWebPage: Refusing to send intent for URL since it is not in the <allow-intent> whitelist. URL=" + url);
|
LOG.w(TAG, "showWebPage: Refusing to send intent for URL since it is not in the <allow-intent> whitelist. URL=" + url);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Intent intent = null;
|
||||||
try {
|
try {
|
||||||
Intent intent = new Intent(Intent.ACTION_VIEW);
|
if (url.startsWith("intent://")) {
|
||||||
// To send an intent without CATEGORY_BROWSER, a custom plugin should be used.
|
intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);
|
||||||
intent.addCategory(Intent.CATEGORY_BROWSABLE);
|
|
||||||
Uri uri = Uri.parse(url);
|
|
||||||
// Omitting the MIME type for file: URLs causes "No Activity found to handle Intent".
|
|
||||||
// Adding the MIME type to http: URLs causes them to not be handled by the downloader.
|
|
||||||
if ("file".equals(uri.getScheme())) {
|
|
||||||
intent.setDataAndType(uri, resourceApi.getMimeType(uri));
|
|
||||||
} else {
|
} else {
|
||||||
intent.setData(uri);
|
intent = new Intent(Intent.ACTION_VIEW);
|
||||||
|
// To send an intent without CATEGORY_BROWSER, a custom plugin should be used.
|
||||||
|
intent.addCategory(Intent.CATEGORY_BROWSABLE);
|
||||||
|
Uri uri = Uri.parse(url);
|
||||||
|
// Omitting the MIME type for file: URLs causes "No Activity found to handle Intent".
|
||||||
|
// Adding the MIME type to http: URLs causes them to not be handled by the downloader.
|
||||||
|
if ("file".equals(uri.getScheme())) {
|
||||||
|
intent.setDataAndType(uri, resourceApi.getMimeType(uri));
|
||||||
|
} else {
|
||||||
|
intent.setData(uri);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (cordova.getActivity() != null) {
|
if (cordova.getActivity() != null) {
|
||||||
cordova.getActivity().startActivity(intent);
|
cordova.getActivity().startActivity(intent);
|
||||||
} else {
|
} else {
|
||||||
LOG.d(TAG, "Cordova activity does not exist.");
|
LOG.d(TAG, "Cordova activity does not exist.");
|
||||||
}
|
}
|
||||||
} catch (android.content.ActivityNotFoundException e) {
|
} catch (URISyntaxException e) {
|
||||||
LOG.e(TAG, "Error loading url " + url, e);
|
LOG.e(TAG, "Error parsing url " + url, e);
|
||||||
|
} catch (ActivityNotFoundException e) {
|
||||||
|
if (url.startsWith("intent://") && intent != null && intent.getStringExtra("browser_fallback_url") != null) {
|
||||||
|
showWebPage(intent.getStringExtra("browser_fallback_url"), openExternal, clearHistory, params);
|
||||||
|
} else {
|
||||||
|
LOG.e(TAG, "Error loading url " + url, e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user