怎么在android实现通过android图片浏览器apk点击链接打开apk

Android实现通过浏览器点击链接打开本地应用(APP)并拿到浏览器传递的数据
点击中的URL链接,启动特定的App。
首先做成HTML的页面,页面内容格式如下:
这一句就可以了。
各个项目含义如下所示:
scheme:判别启动的App。 ※详细后述
host:适当记述
path:传值时必须的key
※没有也可以
query:获取值的Key和Value ※没有也可以
作为测试好好写了一下,如下:
接下来是端。
首先在AndroidManifest.xml的MAIN Activity下追加以下内容。(启动Activity时给予)
※必须添加项
HTML记述的内容加入。
其中必须的内容仅scheme,没有其他内容app也能启动。
※注意事项:intent-filter的内容【android.intent.action.MAIN】和 【android.intent.category.LAUNCHER】这2个,不能与这次追加的内容混合。
所以,如果加入了同一个Activity,请按以下这样做,否则会导致应用图标在桌面消失等问题。
这样的话,没有问题。
接下来在Activity中需要取值的地方添加以下代码,我是直接写在OnCreate函数里的:
Intent i_getvalue = getIntent();
String action = i_getvalue.getAction();
if(Intent.ACTION_VIEW.equals(action)){
Uri uri = i_getvalue.getData();
if(uri != null){
String name = uri.getQueryParameter("name");
String age= uri.getQueryParameter("age");
这样就能获取到URL传递过来的值了。
——————————————————————————————————我是分割线————————————————————————————————————
代码copy完了,是不是很惊奇的发现用浏览器输入
myapp://jp.app/openwith?name=zhangsan&age=26
是不是404,打不开?
楼主你这不是骗人么!楼主你个混蛋啊。
客官,稍安勿躁啊,你看看你用的浏览器是什么?UC,猎豹,欧朋?放弃吧,试试自带浏览器或者谷歌浏览器吧。肯定能成功的,不能成功的话再来坑我。哈哈。
——————————————————————————————————我是分割线————————————————————————————————————
突然觉得好悲哀,好不容易get了这个技能,却不能被第三方浏览器使用。在这个android浏览器大部分被第三方占据着的时代不得不说是个悲剧啊。
接下来还是说说为什么第三方浏览器不能成功吧。首先,我发现的是UC浏览器,如果你使用了自己的scheme,而不是http的话,uc会默认在你的scheme前面添加http://。这太坑爹了。其他浏览器没看是不是同样的情况。发现这个问题后我就试着把自己的scheme换成http。然后满怀期待的又跑了一遍,结果还是坑爹了。所以我想会不会是第三方浏览器对url做了处理。到这里,我也无可奈何了。我测试了UC,猎豹,欧朋,这3个都不支持。系统自带的和谷歌浏览器是支持的。
最后再补充个线索吧,在浏览器里搜索百度应用。进了他们的页面后,他们是可以实现在各种浏览器启动已经安装好的本地app的。看到这个后我就看了下他们页面的。
在这里他们页面添加了个data-sentintent的标签,看到这里,应该能确定第三方浏览器应该是默认都不支持发intent的,只能自己起一个。根据前端说,这个标签应该是自定义的。我们前端看源码的时候发现是这样的
vcnPPGEgdGFyZ2V0PQ=="_blank" target="_blank" href="/questions/3469908/make-a-link-in-the-android-browser-start-up-my-app">stackoverflow两个相关链接:
最近遇到这么一个需求:
当用户在手机浏览器中点击一个按钮时,如果手机上已经该应用程序,则直接打开,如果没有安装,则转向应用下载页面。 再详细一点就是:通过点击网页中一个按钮,打开本地某个Activity(如果有的话)或用浏览器打开某个url。
查了一下文档,Android是支持这个的:
/guide/topics/manifest/data-element.html
解释一下文档中的描述:scheme://host:port/pathorpathPrefixorpathPattern
这里面定义的schema+host+port+(path or pathPrefix or pathPattern)能拼凑出一个http链接,包含这个filter的Activity,能处理这个http链接。
点击这个按钮:
id="applink1"
href="/demo/test.php">打开</a>
在 /demo/test.php中,直接请求xxxx.apk下载。
Activity代码
给目标Activity增加以下filter:
<intent-filter>
android:name="android.intent.action.VIEW"
android:name="android.intent.category.DEFAULT"
android:name="android.intent.category.BROWSABLE"
android:host="
android:path="/demo/test.php"
android:scheme="http"
</intent-filter>
增加该filter后,该Activity就能处理 http:///demo/test.php。在浏览器中点击“开始”,发起对该URL的请求时,如果本机安装了这个应用,系统就会弹出一个选择,询问你想使用浏览器打开,还是使用该应用打开,如下图:
如果本机没有安装这个应用,则直接会使用浏览器打开/demo/test.php,又因为该页面中直接请求了XX.apk,浏览器会提示你下载应用,如下图:Android调用默认浏览器打开指定Url的方法实例
字体:[ ] 类型:转载 时间:
业务员有需求要将一个wap站在手机上以App的形式打开,还不要嵌套WebView,只能以浏览器打开.查了点资料,就有了下面这代码
代码如下:package com.gzz.
import android.net.Uimport android.os.Bimport android.app.Aimport android.content.Iimport android.util.Limport android.view.Mimport android.view.V
public class MainActivity extends Activity {&&& private static final String TAG = "ActivityDemo"; &&& @Override&&& protected void onCreate(Bundle savedInstanceState) {&&&&&&& super.onCreate(savedInstanceState);&&&&&&& setContentView(R.layout.activity_main);&&&&&&& &&&&&&& Intent intent = new Intent();&&&&&&& &&&&&&& intent.setAction("android.intent.action.VIEW");&&& &&&&&&& Uri content_url = Uri.parse(http://www.jb51.net);&& &&&&&&& intent.setData(content_url);& &&&&&&& startActivity(intent);&&&&&&& &&& }&&&&&&& @Override& &&&&&&& protected void onResume() {& &&&&&&&&&&& super.onResume(); &&&&&&&&&&& Intent intent = new Intent();&&&&&&& &&&&&&&&&&& intent.setAction("android.intent.action.VIEW");&&& &&&&&&&&&&& Uri content_url = Uri.parse("http://play.jb51.net");&& &&&&&&&&&&& intent.setData(content_url);& &&&&&&&&&&& startActivity(intent);&&&&&&&&&&& Log.e(TAG, "start onResume~~~");& &&&&&&& }& &&&&&&& @Override& &&&&&&& protected void onStop() {& &&&&&&&&&&& super.onStop();& &&&&&&&&&&& this.finish();&&&&&&&&&&& Log.e(TAG, "start onStop~~~");& &&&&&&& }& }onResume()在没有默认浏览器的时候就起作用了,当没有默认浏览器的时候会弹出提示以哪个浏览器打开,如果点击取消就会出现黑色背景,为防止出现黑色背景,onsume()重新调用打开浏览器.
onStop()在选择浏览器后结束进程.
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具Android实现通过浏览器点击链接打开本地应用(APP)并拿到浏览器传递的数据
我的图书馆
Android实现通过浏览器点击链接打开本地应用(APP)并拿到浏览器传递的数据
今天老大给我提了一个需求叫我调研一下,他已经测试了IOS平台上是可以的,需求很简单就是在系统浏览器中通过输入一个uri就可以打开相应的app。
比如你在IOS中的系统浏览器中输入:tel://123,就会跳到拨打电话页面而且拨打号码是123,像这样的命令,老大他用了小米手机测试了一下,发现可以的,所以他就以为Android的也是可以的,但是当我用三星和htc手机测试发现不行,这时候老大就纠结了,但是我个人认为,我们都知道小米手机是模仿IOS的,没想到模仿的这么想。所以老大就叫我去调研,我查阅了资料之后,找到了解决办法如下
先上一份代码,经楼主验证是绝对可以用的而且也比较清晰的代码!(ps:还是先剧透下吧,第三方大部分浏览器无法成功。)
点击浏览器中的URL链接,启动特定的App。
首先做成HTML的页面,页面内容格式如下:
&a href="[scheme]://[host]/[path]?[query]"&启动应用程序&/a&
这一句就可以了。
各个项目含义如下所示:
scheme:判别启动的App。 ※详细后述
host:适当记述
path:传值时必须的key & & ※没有也可以
query:获取值的Key和Value& ※没有也可以
作为测试好好写了一下,如下:
&a href="myapp://jp.app/openwith?name=zhangsan&age=26"&启动应用程序&/a&
接下来是Android端。
首先在AndroidManifest.xml的MAIN Activity下追加以下内容。(启动Activity时给予)
※必须添加项
&intent-filter&
&action android:name="android.intent.action.VIEW"/&
&category android:name="android.intent.category.DEFAULT" /&
&category android:name="android.intent.category.BROWSABLE" /&
&data android:scheme="myapp" android:host="jp.app" android:pathPrefix="/openwith"/&
&/intent-filter&
HTML记述的内容加入&data …/&。
其中必须的内容仅scheme,没有其他内容app也能启动。
※注意事项:intent-filter的内容【android.intent.action.MAIN】和 【android.intent.category.LAUNCHER】这2个,不能与这次追加的内容混合。
& & & & & & & & &所以,如果加入了同一个Activity,请按以下这样做,否则会导致应用图标在桌面消失等问题。
&intent-filter&
&action android:name="android.intent.action.MAIN"/&
&category android:name="android.intent.category.LAUNCHER" /&
&/intent-filter&
&intent-filter&
&action android:name="android.intent.action.VIEW"/&
&category android:name="android.intent.category.DEFAULT" /&
&category android:name="android.intent.category.BROWSABLE" /&
&data android:scheme="myapp" android:host="jp.app" android:pathPrefix="/openwith"/&
&/intent-filter&
这样的话,没有问题。
接下来在Activity中需要取值的地方添加以下代码,我是直接写在OnCreate函数里的:
Intent i_getvalue = getIntent(); &
String action = i_getvalue.getAction(); &
if(Intent.ACTION_VIEW.equals(action)){ &
& & Uri uri = i_getvalue.getData(); &
& & if(uri != null){ &
& & & & String name = uri.getQueryParameter("name"); &
& & & & String age= uri.getQueryParameter("age"); &
这样就能获取到URL传递过来的值了。
——————————————————————————————————我是分割线————————————————————————————————————
代码copy完了,是不是很惊奇的发现用浏览器输入
myapp://jp.app/openwith?name=zhangsan&age=26
是不是404,打不开?
楼主你这不是骗人么!楼主你个混蛋啊。
客官,稍安勿躁啊,你看看你用的浏览器是什么?UC,猎豹,欧朋?放弃吧,试试系统自带浏览器或者谷歌浏览器吧。肯定能成功的,不能成功的话再来坑我。哈哈。
——————————————————————————————————我是分割线————————————————————————————————————
突然觉得好悲哀,好不容易get了这个技能,却不能被第三方浏览器使用。在这个android浏览器大部分被第三方占据着的时代不得不说是个悲剧啊。
接下来还是说说为什么第三方浏览器不能成功吧。首先,我发现的是UC浏览器,如果你使用了自己的scheme,而不是http的话,uc会默认在你的scheme前面添加http://。这太坑爹了。其他浏览器没看是不是同样的情况。发现这个问题后我就试着把自己的scheme换成http。然后满怀期待的又跑了一遍,结果还是坑爹了。所以我想会不会是第三方浏览器对url做了处理。到这里,我也无可奈何了。我测试了UC,猎豹,欧朋,这3个都不支持。系统自带的和谷歌浏览器是支持的。
最后再补充个线索吧,在浏览器里搜索百度应用。进了他们的页面后,他们是可以实现在各种浏览器启动已经安装好的本地app的。看到这个后我就看了下他们页面的源码。
在这里他们页面添加了个data-sentintent的标签,看到这里,应该能确定第三方浏览器应该是默认都不支持发intent的,只能自己起一个。根据前端说,这个标签应该是自定义的。我们前端看源码的时候发现是这样的
所以最后的结果应该是百度这边是起了个端口,然后在应用里启用了一个服务,来监听这个端口,来获取这个intent。大概就这个思路了。不过楼主没有实际去操作。项目时间紧,太麻烦了。对了,百度这个是有集成他们inapp这个sdk的。
再附上两个相关链接:
上一篇下一篇
馆藏&23062
TA的最新馆藏
喜欢该文的人也喜欢下次自动登录
现在的位置:
& 综合 & 正文
Android中通过intent打开浏览器到指定网页
android系统内置了很多应用,包括电话拨号,短信,浏览器等,这里创建一个简单的Android程序,调用内置的浏览器打开指定的地址。
界面如下:
对应的layout xml为:
&RelativeLayout xmlns:android="/apk/res/android"
xmlns:tools="/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" &
android:id="@+id/btnGo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_marginTop="46dp"
android:text="@string/btnTitle_go" /&
android:id="@+id/txtUri"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/btnGo"
android:layout_alignBottom="@+id/btnGo"
android:layout_alignParentLeft="true"
android:layout_toLeftOf="@+id/btnGo"
android:ems="10"
android:text="" &
&requestFocus /&
&/EditText&
&/RelativeLayout&
是Java代码实现如下,主要是给EditText添加一个OnKeyListener,处理在editText里面按回车键,给button添加一个onClickListener,触发到OpenBroswer函数,通过intent打开内置的浏览器。
package com.example.
import android.net.U
import android.os.B
import android.app.A
import android.content.I
import android.view.KeyE
import android.view.M
import android.view.V
import android.view.View.OnClickL
import android.view.View.OnKeyL
import android.widget.B
import android.widget.EditT
public class MainActivity extends Activity {
private EditText urlText;
private Button goButton;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
urlText = (EditText)findViewById(R.id.txtUri);
goButton = (Button)findViewById(R.id.btnGo);
//setup event handler
urlText.setOnKeyListener(new OnKeyListener(){
public boolean onKey(View view, int keyCode, KeyEvent event){
if(keyCode == KeyEvent.KEYCODE_ENTER){
openBrower();
return true;
return false;
goButton.setOnClickListener(new OnClickListener(){
public void onClick(View view){
openBrower();
protected void openBrower() {
Uri uri = Uri.parse(urlText.getText().toString());
Intent intent = new Intent(Intent.ACTION_VIEW,uri);
startActivity(intent);
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
代码不复杂,不过从.net + visual studio过来的,还是不习惯。。。
运行效果:
&&&&推荐文章:
【上篇】【下篇】}

我要回帖

更多关于 android下载链接apk 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信