android调用app
⑴ Android点击短信链接打开App之App Link 技术实现(亲证篇)
学习资料:
Android 点击Url(短信链接)打开App 的调研与实现
Google App Link 技术实现(亲证篇)
AppLinks使用详解
实现方式分:Deep linking 与 Android App Links
Deep linking方式实现:具体可以参考 Android 点击Url(短信链接)打开App 的调研与实现
Android App Links方式实现
第一步 验证一个服务器地址(例如https://asuss.ryit.co),成功验证通过后,当用户在短信中点击于类似https://asuss.ryit.co/login的web链接,即可打开app本地相关页面,我们在AndroidMenifest的启动页进行配置
第二步 assetlinks.json文件制作 Android Studio中Tools>App Link Assistants
这个文件只能放在https的链接中,不管你之前在action中声明的是http或者https
第三步 验证
1)打开浏览器访问https://asuss.ryit.co/.well-known/assetlinks.json,正常应该看到该文件内容输出。
2)访问google api,查看app是否通过App Links验证(需翻墙这步一定要做,有人反馈如果不做这步还是deeplink)
https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=https://asuss.ryit.co(替换你的服务器名)&relation=delegate_permission/common.handle_all_urls
3)在短信中编辑https://asuss.ryit.co,之后点击url直接跳转到应用中省去了跳转到浏览器的选择跳转过程
注意:图中url为个人虚拟url了,替换即可
散花,爱你们,我的安卓老兄弟们,安卓老姐们,我踩完坑了。
⑵ 怎么用网页的超级链接调用安卓手机的app
一、通过html页面打开Android本地的app
1、首先在编写一个简单的html页面
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="m://my.com/">打开app</a><br/>
</body>
</html>
2、在Android本地app的配置
在AndroidManifest的清单文件里的intent-filte中加入如下元素:
<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:host="my.com"
android:scheme="m" />
</intent-filter>
示例截图如下:
然后使用“手机浏览器”或者“webview”的方式打开这个本地的html网页,点击“打开APP”即可成功开启本地的指定的app
二、如何通过这个方法获取网页带过来的数据
只能打开就没什么意思了,最重要的是,我们要传递数据,那么怎么去传递数据呢?
我们可以使用上述的方法,把一些数据传给本地app,那么首先我们更改一下网页,代码修改后:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="m://my.com/?arg0=0&arg1=1">打开app</a><br/>
</body>
</html>
(1).假如你是通过浏览器打开这个网页的,那么获取数据的方式为:
Uri uri = getIntent().getData(); String test1= uri.getQueryParameter("arg0"); String test2= uri.getQueryParameter("arg1");
(2)如果使用webview访问该网页,获取数据的操作为:
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Uri uri=Uri.parse(url);
if(uri.getScheme().equals("m")&&uri.getHost().equals("my.com")){
String arg0=uri.getQueryParameter("arg0");
String arg1=uri.getQueryParameter("arg1");
}else{
view.loadUrl(url);
}
return true;
}
});
⑶ Android APP调起另外一个APP并传值
第一种:
第二种:
setClassName内部也是调用的setComponent。
调用方:
被调用方在AndroidManifest的Activity中添加自定义action:
被调用方数据接收:
第一种:
调用方通过点击H5网页上按钮
这种方法存在着弊端就是没办法判断手机上是否安装APP时,更适合打开自己APP中Activity。一般建议js与java进行交互调用原生的方法: WebViewJavascriptBridge 使用简单方便,并且避免了一些js脚本注入漏洞。
第二种:隐式调用
被调用方在AndroidManifest的Activity中添加自定义action:
被调用Activity中数据接收:
注意: 这两种方式只适合针对某个页面,都只是在自己应用中跳转第三方应用,并不是真正的唤醒,比如应用A已经在后台存在了,应用B调用以上两种方式后,只是在应用B中重新打开了一个应用A,此时的应用A是相当与存在两个,一个是在后台单独存在,一个是依存应用B存在,是添加到应用B的栈中的,当点击A页面里面的跳转按钮时才真正调起跳转到A应用。
⑷ Android 跨应用间调用: URL Scheme
Android中的自定义的 URL Scheme 是一种页面内跳转协议,也可以被称为 URLRouter ,就是通过类似打开网页的方式去通过路由打开一个Activity,而非直接通过显式Intent方式去进行跳转。这样隐式intent的方法跳转好处如下:
上文已经说过, URL Scheme 是就通过类似打开网页的方式去通过路由打开一个Activity,其协议格式和我们打开网页输入的网址类似。
一个完整的完整的URL Scheme协议格式由scheme、host、port、path和query组成,其结构如下所示:
其中scheme既可以是Android中常见的协议,也可以是我们自定义的协议。Android中常见的协议包括content协议、http协议、file协议等,自定义协议可以使用自定义的字符串,当我们启动第三方的应用时候,多是使用自定义协议。
如下是一个自定义协议的URI:
通过上面的路径 Scheme、Host、port、path、query全部包含:
URL Scheme 的使用方法简要言之就是先在manifest中配置能接受Scheme方式启动的activity;当需要调用时,将Scheme协议的URi以Data的形式加入到Intent中,隐式调用该activity。
1). 在AndroidManifest.xml中对<activity >标签增加<intent-filter>设置Scheme
上面的设置中可以看到,MainActivity包含多个<intent-filter>设置,第一个是正常的启动,也就是在应用列表中启动;第二个是通过 URL Scheme 方式启动,其本身也是隐式Intent调用的一种,不同在于添加了<data>属性,定义了其接受 URL Scheme 协议格式为 urlschemel://auth_activity
这里需要说明下, URL Scheme 协议格式中,组成URI的这些属性在<data >标签中都是可选的 ,但存在如下的依赖关系:
当我们将intent对象中的Uri参数与intent-filter中的<data>标签指定的URI格式进行对比时,我们只对比intent-filter的<data>标签指定的部分,例如:
需要注意的是,intent-filter的<data>标签在指定path的值时,可以在里面使用通配符*,起到部分匹配的效果。
2). 使用URL启动Activity
当然可以在网页中调用
或者是在JS中调用
3.)如何判断URL Scheme是否有效
有时候需要把一些辅助性的、较为独立的APP在Home Launcher中隐藏起来,只允许一些特定的APP调用。这个时候,我们可以利用 URL Scheme 协议来做到这一点,设置AndroidManifest.xml中对<activity >标签如下
因为Home Launcher列出的应用图标要求必须有Activity同时满足
上面的配置中有多余的category和data限制存在,所以并不匹配,不会在Home Launcher出现,但是可以使用 URL Scheme 来启动。
这样就可以将一组APP设置一个统一的入口,然后根据实际需要在调用不同子APP,即所谓的 APP业务组件化 , URL Scheme 在其中有着重要的作用,更进一步讨论会在以后的文章中呈现,敬请期待。
参考文献:
http://blog.csdn.net/iispring/article/details/48481793
http://blog.csdn.net/hb707934728/article/details/53196419
http://www.cnblogs.com/whoislcj/p/5825333.html
⑸ 安卓浏览器开发怎样被其他APP调用
如果想要对方应用点击链接后直接调用你的浏览器打开,那是无法实现的(除非只装了你这一个浏览器)。
首先你应该了解,android中打开activity或者service是通过发送intent去执行的,而intent又有隐性和显性之分。
只有对方应用创建的是显性intent并指定了你开发的浏览器,那么才会直接以你的浏览器打开网页,
但这个intent是由发送方决定的,你作为浏览器的开发者是无可奈何的。
你能做的只是开发一个broadcastReceiver(广播接收器),告诉系统你是一个浏览器,
那么当用户用隐式intent去打开浏览器时,你就会作为一个备选浏览器供用户选择。
⑹ Android怎么调用系统自带邮箱app
在Android中,调用Email有三种类型的Intent: Intent.ACTION_SENDTO 无附件的发送 Intent.ACTION_SEND 带附件的发送 Intent.ACTION_SEND_MULTIPLE 带有多附件的发送 当然,所谓的调用Email,只是说Email可以接收Intent并做这些事情,可能也有其他的应用程序实现了相关功能,所以在执行的时候,会出现选择框进行选择。 1.使用SENTTO发送
1
2
3
4
5
6
7
8
9
10
Intent data=new Intent(Intent.ACTION_SENDTO);
data.setData(Uri.parse("mailto:[email protected]"));
data.putExtra(Intent.EXTRA_SUBJECT, "这是标题");
data.putExtra(Intent.EXTRA_TEXT, "这是内容");
startActivity(data);
Intent data=new Intent(Intent.ACTION_SENDTO);
data.setData(Uri.parse("mailto:[email protected]"));
data.putExtra(Intent.EXTRA_SUBJECT, "这是标题");
data.putExtra(Intent.EXTRA_TEXT, "这是内容");
startActivity(data);
⑺ Android内嵌网页,调用APP显示typeerror
因为你在该APP中重写了相关方法。
单从前端技术上是解决不了这个问题的,这个问题之所以不太好排查,一方面跟手机端的图片上传功能我不太常用到有很大关系。
我们见到一些其它的APP容器能支持该功能,所以思维在习惯上已经形成定势,误以为这是WebView默认就支持的。建议下次进行类似功能的需求评审,别忘了先了解下相应的APP容器是否支持该功能,如果没有,则需要找到相应的客户端开发同学评估一下工时,以免造成影响项目进度的风险。
⑻ android 怎么调用其它的app
在同一个应用中,大家都熟悉用Intent在Activity之间跳转。那么Intent能否再两个应用之间跳转呢。答案是肯定的。在Android2.0 后的做如下:
app1 org.freedom.app1.HelloActivityapp2 org.freedom.app2.TestActivity如何在app2的TestActivity调用app1的HelloActivity呢?
首先在app1的 AndroidManifest.xml中 HelloActivity声明中加入如下内容:<intent-filter>
<action android:name=""/>
</intent-filter>
然后就可以调用了TestActivity 中调用代码如下:Intent Intent = new Intent();intent.setClassName("org.freedom.app1", "org.freedom.app1.HelloActivity");startActivity(intent);
⑼ Android 调用手机浏览器的正确方式
intent-filter详解
前提: 本人通过手机默认浏览器及html查看器都可以成功调起本地app
调起App时,获取到html中的内容如下,该内容被封装到Intent中,并通过 intent.getData()获取(使用Uri表示),我们通过uri.getQueryParameter()获取具体字段的值。
1.当App已启动时,也可以调起app,只是获取不到Intent中的数据。我的大概理解是Android中Activity启动时通过Intent在传递数据,如果我们的Activity已经启动,没有再次获取Intent对象,android:launchMode="singleInstance";这个需要其它同学解答下。
2.为什么我把Activity启动模式设置为android:launchMode="singleInstance"?因为如果我们使用默认的standard模式,会发现被调起的app的Activity运行在浏览器的任务栈中了。这是Activity启动模式对调起App的影响。
3.有什么不足之处,希望大家指正。谢谢