《Android 应用案例开发大全(第二版)》——6.7节获取第三方程序中可调用的窗口

简介:

本节书摘来自异步社区《Android 应用案例开发大全(第二版)》一书中的第6章,第6.7节获取第三方程序中可调用的窗口,作者李宁,更多章节内容可以访问云栖社区“异步社区”公众号查看

6.7 获取第三方程序中可调用的窗口
Android开发权威指南(第二版)
第X问1 源代码目录:src/ch06/InvokeSinaWeibo

现在很多程序中使用的功能并未包含在程序本身,都是通过各种插件方式获得的其他程序的资源。例如,经常会使用到的“分享”功能就是调用了系统中所有可以处理某类资源的窗口来实现的,如果这样的窗口多于一个,就会显示一个选择列表。

如果想利用其他程序中的资源,首先要了解程序对外的接口。但很多程序并没有公开相应的接口,在这种情况下,就需要通过该程序的APK文件获取我们需要的信息。本节就以新浪微博Android客户端分析如何获取第三方程序中可调用的窗口和调用方法。读者可从官方网站(http://weibo.com)下载最新的新浪微博客户端安装包(APK文件)。安装完后应先登录微博再测试本例。

由于APK文件就是ZIP压缩格式文件,所以读者可以随便找一个解压软件将APK文件解开。这里假设APK文件的文件名为sina_weibo.apk,解开sina_weibo.apk文件后,再解压根目录会找到一个AndroidManifest.xml文件,不过该文件是被编译过的,无法使用文本编辑器查看其内容。但可以使用一些工具将其反编译。本节介绍一个简单的工具AXMLPrinter2,该工具用Java编写,是一个jar文件,所以可以在任何支持JDK的操作系统平台上使用。该工具的下载地址如下:

http://android4me.googlecode.com/files/AXMLPrinter2.jar
读者也可以在随书光盘的tools目录中找到该工具。

现在将AXMLPrinter2.jar文件与AndroidManifest.xml文件放到一个目录,然后在控制台(终端)进入该目录,并执行如下的命令,将AndroidManifest.xml文件解压为AndroidManifest.txt。

java -jar ./AXMLPrinter.jar ./AndroidManifest.xml > ./AndroidManifest.txt
现在用任何一个文本编辑器打开AndroidManifest.txt,除了引用的资源都变成了十六进制的值外,其他的内容都恢复了原样。

本例会使用sina_weibo.apk的3个功能:显示微博主界面、发布微博(显示空的微博发布窗口)和分享微博(将要发布的文本和图像传入微博发布窗口)。在运行本例之前一定要安装sina_weibo.apk,否则程序会因为没找到相应的窗口而抛出异常。

首先来看如何显示微博主界面。既然显示的是主界面,那么一定是单击程序图标显示的窗口,也就是包含android.intent.action.MAIN的窗口,了解了这些后,马上在AndroidManifest.txt文件中搜索android.intent.action.MAIN,我们会找到一个SplashActivity窗口,这是显示程序封面的窗口,该窗口关闭后,就会显示微博主窗口(带微博列表的窗口),由于在SplashActivity类中需要做一些初始化工作,所以不能直接显示主窗口(MainTabActivity)。

现在搜素SplashActivity窗口的过滤器,会找到如下一个过滤器。我们会发现这个过滤器很眼熟。在6.6.3小节介绍的系统浏览器(Browser)也使用了类似的过滤器,只不过scheme不同,而且也没指定host。

<intent-filter>
  <action
    android:name="android.intent.action.VIEW">
  </action>
  <category
    android:name="android.intent.category.DEFAULT">
  </category>
  <category
    android:name="android.intent.category.BROWSABLE">
  </category>
  <data
    android:scheme="sinaweibo"
    android:host="splash">
  </data>
</intent-filter>

如果读者仔细阅读了6.5节的内容,应该很容易知道如何显示这个过滤器所在的窗口,代码如下。

public void onClick_StartSinaWeibo(View view)
{
  Intent intent = new Intent("android.intent.action.VIEW");
  intent.addCategory("android.intent.category.BROWSABLE");
  intent.setData(Uri.parse(**"**sinaweibo://splash**"**));
  startActivity(intent);
}

现在要找到可以发布新微博的窗口,继续搜索AndroidManifest.txt文件的内容(主要搜索标签),会找到一个叫com.sina.weibo.intent.action.NEW_BLOG的Action,对应的窗口类是EditActivity。现在用下面的代码测试一下,发现完全可以显示微博的发布界面。

public void onClick_PostWeibo(View view)
{
  Intent intent = new Intent("com.sina.weibo.intent.action.NEW_BLOG");
  startActivity(intent);
}

最后要实现“分享”功能,这个功能需要使用前面涉及的一个通用的Action,就是Intent.ACTION_SEND(android.intent.action.SEND),分享微博的代码如下:

public void onClick_Share(View view)
{
  Intent intent = new Intent("android.intent.action.SEND");
  // 设置要分享的文本
  intent.putExtra(Intent.EXTRA_TEXT, "今天气温很低,注意保暖哦,亲!");
  // 必须指定Mime Type为text/plain
  intent.setType("text/plain");
  startActivity(intent);
}

如果读者还想确定一下的话,可以在AndroidManifest.txt文件中搜索android.intent.action.SEND,会找到两个指定该Action的过滤器。一个设置了Mime Type为“text/plain”,用于处理文本数据;另一个Mime Type为“image/*”,用于处理文本和图像数据。如果想同时处理文本和图像数据(发布带图像的微博),可以使用下面的代码。

Intent intent = new Intent("android.intent.action.SEND");
intent.putExtra(Intent.EXTRA_TEXT, "今天气温很低,注意保暖哦,亲!");
// 需要指定图像文件的绝对路径
intent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:///sdcard/test.jpg"));
// 通常设为Mime Type为image/*
intent.setType("image/*");
startActivity(intent);

如果使用上面的代码可能会有多个窗口符合条件,这样就会显示选择列表。如果不想显示选择列表,直接调用新浪微博的分享微博界面,可以使用下面的代码。

public void onClick_ShareWithSinaWeibo(View view)
{
    Intent intent = new Intent("android.intent.action.SEND");
    // 直接指定Package Name和Activity Class Name
    intent.setClassName("com.sina.weibo", "com.sina.weibo.EditActivity");
  intent.putExtra(Intent.EXTRA_TEXT, "今天气温很低,注意保暖哦,亲!");
  intent.setType("text/plain");
  startActivity(intent);
}

注意

使用显式方式调用EditActivity,也需要指定android.intent.action.SEND,这是因为在微博程序内部检测了Action,如果不为Intent对象指定Action,则Action为null,系统就不会继续处理传递的数据了。如果想通过显式方式分享文本和图像,对Intent对象的设置与隐式方式完全一样。
如果读者想调用系统内置的程序,并且没有Android源代码,也可以从Android模拟器上使用adb pull命令下载相应的APK文件,并按着本节的方法进行分析。

相关文章
|
27天前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
65 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
1月前
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
179 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
1月前
|
Dart 前端开发 Android开发
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
55 4
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
2月前
|
缓存 前端开发 Android开发
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
111 12
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
|
23天前
|
安全 Android开发 iOS开发
escrcpy:【技术党必看】Android开发,Escrcpy 让你无线投屏新体验!图形界面掌控 Android,30-120fps 超流畅!🔥
escrcpy 是一款基于 Scrcpy 的开源项目,使用 Electron 构建,提供图形化界面来显示和控制 Android 设备。它支持 USB 和 Wi-Fi 连接,帧率可达 30-120fps,延迟低至 35-70ms,启动迅速且画质清晰。escrcpy 拥有丰富的功能,包括自动化任务、多设备管理、反向网络共享、批量操作等,无需注册账号或广告干扰。适用于游戏直播、办公协作和教育演示等多种场景,是一款轻量级、高性能的 Android 控制工具。
|
2月前
|
Dart 前端开发 Android开发
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
43 1
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
3月前
|
搜索推荐 前端开发 API
探索安卓开发中的自定义视图:打造个性化用户界面
在安卓应用开发的广阔天地中,自定义视图是一块神奇的画布,让开发者能够突破标准控件的限制,绘制出独一无二的用户界面。本文将带你走进自定义视图的世界,从基础概念到实战技巧,逐步揭示如何在安卓平台上创建和运用自定义视图来提升用户体验。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开新的视野,让你的应用在众多同质化产品中脱颖而出。
85 19
|
3月前
|
JSON Java API
探索安卓开发:打造你的首个天气应用
在这篇技术指南中,我们将一起潜入安卓开发的海洋,学习如何从零开始构建一个简单的天气应用。通过这个实践项目,你将掌握安卓开发的核心概念、界面设计、网络编程以及数据解析等技能。无论你是初学者还是有一定基础的开发者,这篇文章都将为你提供一个清晰的路线图和实用的代码示例,帮助你在安卓开发的道路上迈出坚实的一步。让我们一起开始这段旅程,打造属于你自己的第一个安卓应用吧!
110 14
|
3月前
|
Java Linux 数据库
探索安卓开发:打造你的第一款应用
在数字时代的浪潮中,每个人都有机会成为创意的实现者。本文将带你走进安卓开发的奇妙世界,通过浅显易懂的语言和实际代码示例,引导你从零开始构建自己的第一款安卓应用。无论你是编程新手还是希望拓展技术的开发者,这篇文章都将为你打开一扇门,让你的创意和技术一起飞扬。
|
3月前
|
XML 存储 Java
探索安卓开发之旅:从新手到专家
在数字时代,掌握安卓应用开发技能是进入IT行业的关键。本文将引导读者从零基础开始,逐步深入安卓开发的世界,通过实际案例和代码示例,展示如何构建自己的第一个安卓应用。我们将探讨基本概念、开发工具设置、用户界面设计、数据处理以及发布应用的全过程。无论你是编程新手还是有一定基础的开发者,这篇文章都将为你提供宝贵的知识和技能,帮助你在安卓开发的道路上迈出坚实的步伐。
52 5

热门文章

最新文章

  • 1
    Android历史版本与APK文件结构
  • 2
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
  • 3
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 4
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
  • 5
    【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
  • 6
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 7
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
  • 8
    escrcpy:【技术党必看】Android开发,Escrcpy 让你无线投屏新体验!图形界面掌控 Android,30-120fps 超流畅!🔥
  • 9
    Android实战经验之Kotlin中快速实现MVI架构
  • 10
    即时通讯安全篇(一):正确地理解和使用Android端加密算法
  • 1
    【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
    64
  • 2
    android FragmentManager 删除所有Fragment 重建
    25
  • 3
    Android实战经验之Kotlin中快速实现MVI架构
    41
  • 4
    即时通讯安全篇(一):正确地理解和使用Android端加密算法
    41
  • 5
    escrcpy:【技术党必看】Android开发,Escrcpy 让你无线投屏新体验!图形界面掌控 Android,30-120fps 超流畅!🔥
    46
  • 6
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    156
  • 7
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    54
  • 8
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    73
  • 9
    Android历史版本与APK文件结构
    179
  • 10
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    54