1. 概述

最近研究pc与Android应用程序通过usb通信,顺带研究了一下怎么通过adb启动android应用程序,于是乎看到了am命名(activity manager)。

先附上谷歌开发文档中的描述文档路径,里面比我这里讲得详细。

http://developer.android.com/tools/help/adb.html#IntentSpec

虽然里面讲得很详细,不过对于我这种菜鸟来说,还是花了些时间才理解,希望这些理解能对与我遇到相同疑惑的开发者们有帮助,下面进入正文。

adb shell
这个命令很简单,也就是启动Android的shell程序而已。毕竟需要进入Android的shell后,才能使用Android的系统命令嘛,就像在Linux下,要想使用命令,
也得启动Linux的shell一样。
之后,就到了使用am命令的时候了。
am <command>
这里应该不用解释了。

当然,除了在远程shell里面输入这些命名外,我们也可以不启动远程shell,可以采用下面的方式:

adb shell am <command>

好了,下面正式介绍<command>这部分类容的,因为我主要是想研究怎么启动Android应用,所以就只研究了start命令了,下面详细的讲讲start命令。

start [options] <INTENT>

option:

  • -D: Enable debugging.
  • -W: Wait for launch to complete.
  • --start-profiler <FILE>: Start profiler and send results to <FILE>.
  • -P <FILE>: Like --start-profiler, but profiling stops when the app goes idle.
  • -R: Repeat the activity launch <COUNT> times. Prior to each repeat, the top activity will be finished.
  • -S: Force stop the target app before starting the activity.
  • --opengl-trace: Enable tracing of OpenGL functions.
  • --user <USER_ID> | current: Specify which user to run as; if not specified, then run as the current user.

命令选项这部分没有研究具体的用途,自己目前也不知道,就不说了,当然希望各位大牛们给小弟解释解释。

我就谈谈对<INTENT>部分的理解吧。

-a <ACTION>

启动时,要执行的动作,如:android.intent.action.VIEW,我在这里刚开始没有理解他怎么用,网上大部分例子都是:

adb shell am -a android.intent.action.VIEW -d http://www.baidu.com 启动浏览器打开一个网站

其实,还有更一般的用法,就是可以通过这种方式启动我们自己的app,假设我们在我们的app的AndroidManifest.xml文件中的activity标签中加入了

<intent-filter>
                <action android:name="android.intent.action.MY_APP" />

<category android:name="android.intent.category.DEFAULT" />
            </intent-filter>

那么我们就可以通过:adb shell am start -a android.intent.action.MY_APP来启动我们的应用了,MY_APP随便取名字,不和系统的内置名字冲突就行了。

-d <DATA_URI>

启动时,要传入的URI,如:http://www.baidu.com。到这里,我想我们应该能猜到这个参数的意义了吧,它无非就是在启动我们的activity时,传入URI参数,供app程序分析,并执行对应操作,假设我们的app没有处理这个参数,传进去也没有什么意义。

-t <MIME_TYPE>

摘自别人的文章“我在写android资源管理器(文件浏览器)的时候,希望能在资源管理器的中实现打开文件的操作,此时就需要用到文件的MIME类型。”,这玩意传进去具体怎么用,我也不清楚。用到的时候再研究吧。这个参数

-c <CATEGORY>

启动时,

-n <COMPONENT>

直接启动一个组件,例如:adb shell am start -n com.example.app/.ExampleActivity

-f <FLAGS>

无知道这玩意的用途呀,还没有接触这方面的知识。

--esn <EXTRA_KEY>

-e|--es <EXTRA_KEY> <EXTRA_STRING_VALUE>

--ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE>

--ei <EXTRA_KEY> <EXTRA_INT_VALUE>

--el <EXTRA_KEY> <EXTRA_LONG_VALUE>

--ef <EXTRA_KEY> <EXTRA_FLOAT_VALUE>

--eu <EXTRA_KEY> <EXTRA_URI_VALUE>

--ecn <EXTRA_KEY> <EXTRA_COMPONENT_NAME_VALUE>

--eia <EXTRA_KEY> <EXTRA_INT_VALUE>[,<EXTRA_INT_VALUE...]

--ela <EXTRA_KEY> <EXTRA_LONG_VALUE>[,<EXTRA_LONG_VALUE...]

--efa <EXTRA_KEY> <EXTRA_FLOAT_VALUE>[,<EXTRA_FLOAT_VALUE...]

上面的这些命令属于统一类型,我就找一个解释就行了,这里就找--es <EXTRA_KEY> <EXTRA_STRING_VALUE>举例了。

我们看名字就知道这里传入的是一个键值对了,自然这些数据到时候会填入启动activity的intent中,比如我们输入下面的命令:

am start -a android.intent.action.MY_APP --es data mystringdata

接着我们在activity中的onCreate函数中加入一下代码,检查一下数据是否传入成功:

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        String string = getIntent().getStringExtra("data");
        
        if (null != string) {
            Log.d("zjh", string);    
        } else {
            Log.d("zjh", "无附加数据");    
        }
    }

实际验证得到,输出了mystringdata这个数据。

因此,以上命令就是用于填充intent中对应的数据值而已。

后面的那些命令这里就不分析了,主要是我暂时用不到,当然大家能补充一下也是极好的。

2 示例

启动的方法为

# am start -n 包(package)名/包名.活动(activity)名称

启动的方法可以从每个应用的AndroidManifest.xml的文件中得到

Music 和 Video(音乐和视频)的启动方法为:

# am start -n com.Android.music/com.android.music.MusicBrowserActivity

# am start -n com.android.music/com.android.music.VideoBrowserActivity

# am start -n com.android.music/com.android.music.MediaPlaybackActivity

Camera(照相机)的启动方法为:

# am start -n com.android.camera/com.android.camera.Camera

Browser(浏览器)的启动方法为:

# am start -n com.android.browser/com.android.browser.BrowserActivity

启动浏览器 :

am start -a android.intent.action.VIEW -d  http://www.google.cn/

拨打电话 :

am start -a android.intent.action.CALL -d tel:10086

启动 google map 直接定位到上海 :

am start -a android.intent.action.VIEW geo:0,0?q=shanghai

最后总结一下:

start 后面的<INTENT>部分,无非就是填充完善intent中的内容,当然里面有很多不同的内容,代表着不同的意思,也有不同的用途,这里只能怪自己脑袋不好使,看到<INTENT>没有第一时间联想到它的意义,希望这篇文章对大家有帮助。

了解更多:android之adb原理分析。





Android之adb_reprint相关推荐

  1. Unity5.6+ 导出Android 应用程序apk的环境配置及导出过程

    首先下载并安装安卓SDK和java的JDK 安卓sdk下载: http://www.android-studio.org/ 也可以在这下载: 链接:http://pan.baidu.com/s/1bp ...

  2. Android 的NDK的Makefile编写

    Android.mk 是google根据Linux GNU Makefile精简编译脚本.具体来说:这就是GNU Makefile的一小部分. 举一个简单例子: LOCAL_PATH := $(cal ...

  3. Android Animation (安卓动画)概念简介

    Android Animation Android 四种动画分别为逐帧动画和补间动画.属性动画.过渡动画: Frame Animation (逐帧动画) 实现方式:xml 和 Java代码 图片跳转的 ...

  4. 基于Android和SpringBoot的购物App

    (Shopping)购物应用商城 本软件使用Android和SpringBoot.JavaWeb技术实现:并结合百度LBS平台的SDK.支付宝App支付客户端SDK.MobTech的ShareSDK: ...

  5. Android数据持久化:SharePreference

    SharePreference:作为Android数据持久化的一种,具有一定的便捷性,适合存储一些体积小的数据. 存储数据方式:键值对的方式,类似于Map: 利用SharePreference.Edi ...

  6. Android数据持久化:文件存储

    数据持久化: 数据可分为瞬时数据和关键数据.保存在内存之中的数据是瞬时数据,而对于一些关键性数据,后期需要持续使用的,应当保存在存储设备中: 持久化保存方式: 文件存储.SharePreference ...

  7. Android Studio中RecycerView依赖库加载问题

    依赖包导入思考: 参考资料:recycleview导包问题 打开修改本项目中的build.gradle; 切勿着急添加包,应当提前查看其中的版本号(因为加载的v7包要和其版本保持一致性): 例如: 因 ...

  8. Android布局优化之include、merge、ViewStub

    include:引入重复使用的相同布局 merge:减少include布局的层级,将子元素直接添加到merge标签的parent中 ViewStub:其实就是一个宽高都为0的一个View,它默认是不可 ...

  9. Android动画之帧动画和补间动画

    Android系统提供三种动画:帧动画.补间动画和属性动画.这里先分析总结帧动画和补间动画. FrameAnimation 帧动画,通俗来说就是按照图片动作顺序依次播放来形成动画,创建帧动画可以用 x ...

最新文章

  1. 用php计算自由落体,js模仿物理中的自由落体现象
  2. 理解Android Java垃圾回收机制
  3. [翻译] WindowsPhone-GameBoy模拟器开发二--Rom文件分析
  4. 数据分析不能挣钱、不能给公司创造利润,那要你有什么用?
  5. Matlab解析LQR与MPC的关系
  6. PHP常用函数(收集)
  7. 2021全球国际化大学排名出炉,这所中国高校喜提世界第一!
  8. Python远程连接Windows,并调用Windows命令(类似于paramiko)
  9. c语言编程软件有哪些 Win7下用哪种C语言编译器
  10. 纠删码:定义及常见类型
  11. 寻路系统的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  12. 谷歌打开微信定位服务器地址,使用Chrome修改user agent模拟微信内置浏览器
  13. 20182442-胡名琪
  14. 48个快速操作office技巧
  15. 淘宝至强cpu为什么那么便宜
  16. R7 5800H 和 R5 5600H的差距大吗 哪个好
  17. 在网页调用微信支付,并解决IOS调用提示“缺少参数timeStamp”问题
  18. codeforces 900D. Unusual Sequences(莫比乌斯反演)
  19. MySQL学习笔记day2--DQL案例练习
  20. 【Kotlin 协程】Flow 异步流 ⑧ ( 背压概念 | 使用缓冲处理背压问题 | 使用 flowOn 处理背压问题 | 从提高收集元素效率方向解决背压问题 )

热门文章

  1. 压缩文件设置解压密码
  2. 外贸好用常用的邮箱哪个好?海外电子邮箱企业邮箱申请
  3. 三星android的one ui,三星one ui对比国产安卓定制ui达到怎样的水平?
  4. 超详细IDEA配置SSM环境
  5. 深度技术GHOSTXP SP3快速装机专业版V2011.07
  6. 计算机论文未来展望,从计算机的进化引发对未来的展望论文
  7. POJ FOUR QUARTERS
  8. java getdc_GetDC、GetDCEx、GetWindowDC
  9. 男人和女人真的来自水星和火星(爆笑)
  10. 七,八、JQuery【1201-1202】