http://blog.csdn.net/buptlzx/article/details/9837137

http://blog.csdn.net/buptlzx/article/details/9837137

http://blog.csdn.net/buptlzx/article/details/9837137






Android 从网页中跳转到APP

标签:androidHTML 23552人阅读 评论(10) 收藏 举报 分类: Android(11)

最近,在使用QQ和微信等SDK来实现分享网页的时候,发现,SDK已经为页面跳转回应用提供了基本的数据支持。我们只需在应用里和被分享的网页进行简单的设置,即可实现此功能。

那么我们先来看下网页跳转回应用的实现原理。

就Android平台而言,URI主要分三个部分:scheme, authority and path。其中authority又分为host和port。格式如下:
scheme://host:port/path
举个实际的例子:
content://com.example.project:200/folder/subfolder/etc
\---------/ \---------------------------/ \---/ \--------------------------/
scheme host port path
\--------------------------------/
authority

现在大家应该知道data flag中那些属性的含义了吧,看下data flag
<data android:host="string"
android:mimeType="string"
android:path="string"
android:pathPattern="string"
android:pathPrefix="string"
android:port="string"
android:scheme="string" />

以下是测试示例的实现步骤:

1. 新建一个工程A,并实现一个Activity,用来接收外部的跳转。代码如下:

[java] view plain copy
  1. publicclassJumpActivityextendsActivity{
  2. @Override
  3. protectedvoidonCreate(BundlesavedInstanceState){
  4. //TODOAuto-generatedmethodstub
  5. super.onCreate(savedInstanceState);
  6. Intentintent=getIntent();
  7. Stringdata=intent.getDataString();
  8. System.out.println(data);
  9. }
  10. }

在这个Activity里,我们可以通过getIntent(),来获取外部跳转传过来的信息。

2. 修改ManiFest文件,设置Activity的接收Action的属性,代码如下:

[java] view plain copy
  1. <activityandroid:name=".JumpActivity">
  2. <intent-filter>
  3. <actionandroid:name="android.intent.action.VIEW"/>
  4. <categoryandroid:name="android.intent.category.DEFAULT"/>
  5. <categoryandroid:name="android.intent.category.BROWSABLE"/>
  6. <data
  7. android:host="data"
  8. android:scheme="sharetest"/>
  9. </intent-filter>
  10. </activity>

如上所示,在data里设置了 scheme和host,则该Activity可以接收和处理类似于 "sharetest://data/XXX"的链接。

3. 接下来我们可以写一个测试工程B,看看工程A中的JumpActivity是否可以接收和处理类似于 "sharetest://data/XXX"的链接。因此,新建一个工程B,工程里只有一个WebView,用来打开一个本地的网页。由于WebView在接收到自己不能处理的Uri时,会自动的调用发送Intent来调用能够处理该Uri的应用。

以下是网页的代码:

[html] view plain copy
  1. <!DOCTYPEhtml>
  2. <html>
  3. <body>
  4. <iframesrc="sharetest://data/123"style="display:none"></iframe>
  5. </body>
  6. </html>
将该网页放到Assets目录下,在代码里调用Webview加载该Html文件,代码如下:

[java] view plain copy
  1. publicvoidloadHtml()
  2. {
  3. WebViewwebview=newWebView(this);
  4. WebSettingswSet=webview.getSettings();
  5. wSet.setJavaScriptEnabled(true);
  6. webview.loadUrl("file:///android_asset/a.html");
  7. setContentView(webview);
  8. }

4. 将手机装上工程A和工程B。打开工程A,可以发现:工程B的JumpActivity会自动被打开。如下图所示:在Intent中可以去到网页里发出的链接:sharetest://data/123。

因此,我们就可以在JumpActivity里处理接收到的消息了。


通过以上的4步,相信大家都了解如何让应用接收和处理某种Uri消息。因此,只要我们

1. 在ManiFest里为Activity申明接收并处理某种Uri

2. 在页面中添加以下代码:其中,l为符合Activity处理规则的Uri地址。

[java] view plain copy
  1. <iframesrc="l"style="display:none"></iframe>
就可以让已安装该应用的用户在打开该网页的时候,自动的跳转到应用内部。

点击微信和QQ分享跳转到程序内部的原理与此一致。

2

更多相关文章

  1. android开源工程
  2. 国内目前最全面的介绍——Android中的BroadCastReceiver
  3. Android(安卓)WebView访问SSL证书网页(onReceivedSslError)
  4. Android(安卓)library projects cannot be launched
  5. 短信接收--Android彩信的接收流程(应用层)
  6. Android(安卓)9.0及以上WebView无法打开网页 ERR_CLEARTEXT_NOT_
  7. Android点击WebView网页中的email发送邮件调用
  8. Android(安卓)客户端性能优化(魅族资深工程师毫无保留奉献)
  9. 那些大厂的Android高级工程师岗位都需要做些什么?

随机推荐

  1. android kernel 初始化 1
  2. Android 6.0棉花糖新特性,
  3. android TextView 走马灯效果
  4. Android api,Android SDK
  5. android后台进程隐藏手段
  6. ch026 Android Socket
  7. Uyghur Android
  8. android的布局练习
  9. Fragment 中的onConfigurationChanged 在
  10. android中重要的知识点