在 webview 中单击按钮后,如何从 android 应用程序中的 webview 打开外部应用程序?
How to open external app from webview in android app after a button is clicked in the webview?
我已经试过了
这个解决方案只是在我的 WebView 中打开一个 Google Play Store 网页,我想要的是点击,另一个应用程序应该打开,其意图是在 Chrome.
中提供的
我的应用程序有一个运行良好的 WebView。在一个阶段,WebView 请求访问以下内容(外部支付应用程序):
intent://pay/?pa=digitalshowroom1.payu@indus&pn=DOTPE%20PRIVATE%20LIMITED&tr=13261664955&tid=CX0FOrvSrHzDh7gP&am=1.00&cu=INR&tn=OrderId-CX0FOrvSrHzDh7gP
当我使用我的 WebView 在 Chrome 中使用的同一个网站时,它成功打开了外部支付应用程序,即 Chrome 能够处理该意图,我的应用程序如何处理同样的意图。
我好像知道我得用
public boolean shouldOverrideUrlLoading(WebView view, String url)
为此,我按如下方式使用它:
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url != null && (url.startsWith("whatsapp://") || url.startsWith("tel") || url.startsWith("market"))) {
view.getContext().startActivity(
new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
return true;
}
else {
return false;
}
现在,这段代码正在处理打开 WhatsApp、调用应用程序等意图,因为它们以 whatsapp
或 tel
开头,所以我能够利用 url.startsWith()
方法。
如何处理请求访问外部应用程序并以 intent://
开头的链接?
提前致谢!
使用以下代码:
Uri uri = Uri.parse(url);
if (uri.getScheme().equals("intent")) {
String appPackage = getAppPackageFromUri(uri);
if (appPackage != null) {
PackageManager manager = getContext().getPackageManager();
Intent appIntent = manager.getLaunchIntentForPackage(appPackage);
if (appIntent != null) {
getActivity().startActivity(appIntent);
} else {
// open external website
}
}
}
如有任何问题请使用代码告诉我
编码愉快!
我尝试了类似的方法,发现您必须像这样构建 URI 并处理所有 URL 参数并调用构建方法。我是为 UPI 支付应用程序做的。在 shouldOverrideUrlLoading() 中调用此方法。
public void openPaymentApp(final String url)
{
try {
String pa= url.substring(url.indexOf("pa=")+3,url.indexOf("&pn"));
String pn=url.substring(url.indexOf("pn=")+3,url.indexOf("&tr"));
String tr=url.substring(url.indexOf("tr=")+3,url.indexOf("&tid"));
String tid=url.substring(url.indexOf("tid=")+4,url.indexOf("&am"));
String am=url.substring(url.indexOf("am=")+3,url.indexOf("&cu"));
String cu=url.substring(url.indexOf("cu=")+3,url.indexOf("&tn"));
String tn=url.substring(url.indexOf("tn=")+3,url.indexOf("#Intent"));
Uri uri =
new Uri.Builder()
.scheme("upi")
.authority("pay")
.appendQueryParameter("pa",pa)
.appendQueryParameter("pn",pn)
.appendQueryParameter("tr",tr)
.appendQueryParameter("tid",tid)
.appendQueryParameter("am",am)
.appendQueryParameter("cu",cu)
.appendQueryParameter("tn",tn)
.build();
Intent launchIntent = getPackageManager()
.getLaunchIntentForPackage( "com.package.name");
launchIntent.setData(uri);
startActivity( launchIntent );
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(),"Coudln't open", Toast.LENGTH_SHORT).show();
}
}
我已经试过了
我的应用程序有一个运行良好的 WebView。在一个阶段,WebView 请求访问以下内容(外部支付应用程序):
intent://pay/?pa=digitalshowroom1.payu@indus&pn=DOTPE%20PRIVATE%20LIMITED&tr=13261664955&tid=CX0FOrvSrHzDh7gP&am=1.00&cu=INR&tn=OrderId-CX0FOrvSrHzDh7gP
当我使用我的 WebView 在 Chrome 中使用的同一个网站时,它成功打开了外部支付应用程序,即 Chrome 能够处理该意图,我的应用程序如何处理同样的意图。
我好像知道我得用
public boolean shouldOverrideUrlLoading(WebView view, String url)
为此,我按如下方式使用它:
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url != null && (url.startsWith("whatsapp://") || url.startsWith("tel") || url.startsWith("market"))) {
view.getContext().startActivity(
new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
return true;
}
else {
return false;
}
现在,这段代码正在处理打开 WhatsApp、调用应用程序等意图,因为它们以 whatsapp
或 tel
开头,所以我能够利用 url.startsWith()
方法。
如何处理请求访问外部应用程序并以 intent://
开头的链接?
提前致谢!
使用以下代码:
Uri uri = Uri.parse(url);
if (uri.getScheme().equals("intent")) {
String appPackage = getAppPackageFromUri(uri);
if (appPackage != null) {
PackageManager manager = getContext().getPackageManager();
Intent appIntent = manager.getLaunchIntentForPackage(appPackage);
if (appIntent != null) {
getActivity().startActivity(appIntent);
} else {
// open external website
}
}
}
如有任何问题请使用代码告诉我
编码愉快!
我尝试了类似的方法,发现您必须像这样构建 URI 并处理所有 URL 参数并调用构建方法。我是为 UPI 支付应用程序做的。在 shouldOverrideUrlLoading() 中调用此方法。
public void openPaymentApp(final String url)
{
try {
String pa= url.substring(url.indexOf("pa=")+3,url.indexOf("&pn"));
String pn=url.substring(url.indexOf("pn=")+3,url.indexOf("&tr"));
String tr=url.substring(url.indexOf("tr=")+3,url.indexOf("&tid"));
String tid=url.substring(url.indexOf("tid=")+4,url.indexOf("&am"));
String am=url.substring(url.indexOf("am=")+3,url.indexOf("&cu"));
String cu=url.substring(url.indexOf("cu=")+3,url.indexOf("&tn"));
String tn=url.substring(url.indexOf("tn=")+3,url.indexOf("#Intent"));
Uri uri =
new Uri.Builder()
.scheme("upi")
.authority("pay")
.appendQueryParameter("pa",pa)
.appendQueryParameter("pn",pn)
.appendQueryParameter("tr",tr)
.appendQueryParameter("tid",tid)
.appendQueryParameter("am",am)
.appendQueryParameter("cu",cu)
.appendQueryParameter("tn",tn)
.build();
Intent launchIntent = getPackageManager()
.getLaunchIntentForPackage( "com.package.name");
launchIntent.setData(uri);
startActivity( launchIntent );
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(),"Coudln't open", Toast.LENGTH_SHORT).show();
}
}