Android在网页下(WebView中运用HTML)点击按钮打开本地手机应用程序

最近在做一个Android项目,其中有个需求是在网页中打开本地应用

本来如果是自己项目的使用WebView的话,那很简单,如下所示:

Java类中在WebView中添加JS调用接口,让JS代码可以调用到Java代码即可:

public class Test extends Activity{

private Handler mHandler = new Handler();

@Override

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

setContentView(R.layout.test);

WebView mView = (WebView)findViewById(R.id.webview);

mView.getSettings().setJavaScriptEnabled(true);

mView.loadUrl("file:///android_asset/index.html");

mView.addJavascriptInterface(new OpenApp(), "openApp");

}

class OpenApp

{

public void open(final String pkgName) {

mHandler.post(new Runnable() {

@Override

public void run() {

// TODO Auto-generated method stub

startActivity(getApplicationContext().getPackageManager().getLaunchIntentForPackage(pkgName));

}

});

}

}

}

然后在HTML中的JS代码里使用window.openApp.open(pkgName);即可。

但是坑爹的需求是,这个WebView是别的网页里面,我所能做的只是提供一个HTML页面地址,咋办呢?

突然想到可以将自己的应用加入到系统的分享列表里,那么同样道理就可以去利用系统打开链接时的表现来做文章

因为不管是哪一个都只是一个系统定义的动作而已

于是做了如下尝试

在AndroidManifest.xml中为自己应用中的特定activity配置如下:

然后在HTML中添加一个超链接或者button

openAPP

可是出现的效果并没有达到自己想要的那样

当点击http开头的链接时,系统会把它当作是一个标准的URL

从而把能够处理它的应用全给显示出来了,让你选择使用哪个应用来打开这个链接

那么如何才能直接将自己的应用打开呢?

还是继续这个思路

既然点击链接的时候我们应用可以响应,而且之所以会出现一个列表

那是因为别人也能处理,那么如果这个链接的协议只有我们自己的应用能够处理呢

应该就会直接打开了,ok,做出以下调整

openAPP

另外一种以JS函数实现方式

function openApp()

{state = window.open("myapp://path");}

openAPP

终于达到目的了,在其他应用中点击链接或者其他网页中使用以上方式即可打开自己的应用 希望对大家有所帮助,有不明白的地方请留言,共同探讨

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐