`
1025250620
  • 浏览: 230999 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android学习之Service命令的妙用

 
阅读更多

Android系统不光在host上为我们提供了一些好用的命令, 同时device也有一些隐藏着的命令, 通常它是被系统调用,但是由于权限设置的原因, 普通的进程也能通过命令行去使用它们.
比如,我之前提到的<Android性能测试工具之dumpsys>http://www.2cto.com/kf/201203/125340.html及<Android调试工具之adbs>http://www.2cto.com/kf/201203/125341.html

在device中, 有一个service命令, 可以看到当前所有的service, 同时也可以使用它来往一些activity发送一些信息
如下所示,  service的用法
[plain]
root@android:/ # service                                                        
Usage: service [-h|-?] 
       service list 
       service check SERVICE 
       service call SERVICE CODE [i32 INT | s16 STR] ... 
Options: 
   i32: Write the integer INT into the send parcel. 
   s16: Write the UTF-16 string STR into the send parcel. 
当前运行的service
[plain]
root@android:/ # service list                                                   
Found 61 services: 
0   sip: [android.net.sip.ISipService] 
1   phone: [com.android.internal.telephony.ITelephony] 
2   iphonesubinfo: [com.android.internal.telephony.IPhoneSubInfo] 
3   simphonebook: [com.android.internal.telephony.IIccPhoneBook] 
4   isms: [com.android.internal.telephony.ISms] 
5   nfc: [android.nfc.INfcAdapter] 
6   samplingprofiler: [] 
7   diskstats: [] 
8   appwidget: [com.android.internal.appwidget.IAppWidgetService] 
9   backup: [android.app.backup.IBackupManager] 
10  uimode: [android.app.IUiModeManager] 
11  usb: [android.hardware.usb.IUsbManager] 
12  audio: [android.media.IAudioService] 
13  wallpaper: [android.app.IWallpaperManager] 
14  dropbox: [com.android.internal.os.IDropBoxManagerService] 
15  search: [android.app.ISearchManager] 
16  country_detector: [android.location.ICountryDetector] 
17  location: [android.location.ILocationManager] 
18  devicestoragemonitor: [] 
19  notification: [android.app.INotificationManager] 
20  mount: [IMountService] 
21  throttle: [android.net.IThrottleManager] 
22  connectivity: [android.net.IConnectivityManager] 
...... 

使用service的phone来打电话
[plain]
root@android:/ # service call phone <span style="color:#FF0000;">2</span> s16 "123"                                 
Result: Parcel(00000000    '....') 
此时, 就直接拨号了:), 但是这里注意, 紧急号码在这里是不work的.

下面再来一个用来发短信的
[plain]
root@android:/ # service call isms <span style="color:#FF0000;">4</span> s16 "12345678" s16 "" s16 "hello world!" s16 "" s16 "" 

下面就说一下原理
大家先找到代码frameworks/base/telephony/java/com/android/internal/telephony/ITelephony.aidl和ISms.aidl,
这两个文件都是给OEM厂商集成用的, 代码我这里就不贴了,细心的童鞋一眼就能看出来, 上面的"2", "4"就是指定了是哪一个函数
比如, 2 就是
[plain]
/** 
     * Place a call to the specified number. 
     * @param number the number to be called. 
     */ 
    void call(String number); 
4就是
[plain]
/** 
    * Send an SMS. 
    * 
    * @param smsc the SMSC to send the message through, or NULL for the 
    *  default SMSC 
    * @param text the body of the message to send 
    * @param sentIntent if not NULL this <code>PendingIntent</code> is 
    *  broadcast when the message is sucessfully sent, or failed. 
    *  The result code will be <code>Activity.RESULT_OK<code> for success, 
    *  or one of these errors:<br> 
    *  <code>RESULT_ERROR_GENERIC_FAILURE</code><br> 
    *  <code>RESULT_ERROR_RADIO_OFF</code><br> 
    *  <code>RESULT_ERROR_NULL_PDU</code><br> 
    *  For <code>RESULT_ERROR_GENERIC_FAILURE</code> the sentIntent may include 
    *  the extra "errorCode" containing a radio technology specific value, 
    *  generally only useful for troubleshooting.<br> 
    *  The per-application based SMS control checks sentIntent. If sentIntent 
    *  is NULL the caller will be checked against all unknown applications, 
    *  which cause smaller number of SMS to be sent in checking period. 
    * @param deliveryIntent if not NULL this <code>PendingIntent</code> is 
    *  broadcast when the message is delivered to the recipient.  The 
    *  raw pdu of the status report is in the extended data ("pdu"). 
    */ 
   void sendText(in String destAddr, in String scAddr, in String text, 
           in PendingIntent sentIntent, in PendingIntent deliveryIntent); 

所以, 以后要想在后台发短信,打电话,可以直接调用Java的Runtime Exec来调用service提供的命令, 这样就可以部分绕过framework中的一些java service, 而直接跟更底层的c++/C实现的service直接交互:)

分享到:
评论

相关推荐

    android音乐播放器service学习案例

    本案例“android音乐播放器service学习案例”着重讲解如何利用Service来实现一个音乐播放器,使音乐能够在后台持续播放。 首先,我们需要了解Android Service的基础知识。Service分为两种类型:标准服务...

    Pro Android学习:Android service小例子

    这是Pro Android学习系列中Android Service部分的例子源代码。相关学习笔记见:http://blog.csdn.net/flowingflying/article/details/6212512

    Android notification+Service实时更新

    在Android开发中,`Notification`、`Service`和`BroadcastReceiver`是三个核心组件,它们在许多场景下都有着重要的作用,特别是在实现应用后台运行、实时更新等任务时。本项目"Android notification+Service实时更新...

    android发送AT命令

    在Android系统中,AT(Attention)命令主要用于与硬件模块,如调制解调器或SIM卡进行通信。这些命令遵循Hayes命令集,是通信协议的基础,尤其在GSM、UMTS和LTE网络中广泛使用。AT命令允许设备进行数据传输、网络注册...

    Android 通过基于Service的串口蓝牙双向通讯

    在Android平台上实现基于Service的串口蓝牙双向通讯是一项复杂但重要的技术任务,它涉及到了Android系统服务、蓝牙通信协议以及串口数据交换等多个层面。在这个过程中,开发者需要创建一个后台Service来持续处理蓝牙...

    Android Service和Activity基于串口蓝牙模块的双向通信

    1. Android 中的 Service 是一种没有用户操作界面的组件,可以用来开发监控之类的程序。 2. Service 的生命周期包括 onCreate、onStart、onDestroy 等方法。 3. Service 对象不能自己启动,需要通过某个 Activity、...

    Android 实现进程及Service常驻之MarsDaemon源码

    本文将深入探讨如何使用MarsDaemon源码实现Android进程及Service的常驻,确保服务即使在用户退出应用或者系统清理内存时也能持续运行。 首先,了解Android的进程生命周期是至关重要的。Android系统为了优化资源管理...

    Android在Service里的播放器

    在Android平台上,构建一个在Service中的音乐播放器是常见的需求,尤其对于那些希望在后台持续播放音频的应用。这个“Android在Service里的播放器”主题主要涉及三个关键组件:MediaPlayer、Service以及播放器的控制...

    Service服务的android音乐播放器

    首先,`Service`是Android四大组件之一,它在后台执行长时间运行的任务,不与用户界面直接交互。在音乐播放器中,`Service`通常用来维持音乐播放的状态,即使用户离开应用,音乐也能继续播放。创建`Service`需要继承...

    Android图片上传队列Service

    本篇文章将详细探讨如何创建一个名为“Android图片上传队列Service”的组件,以及其背后的原理和实现策略。 首先,我们需要理解“图片上传队列”的概念。它是一种任务调度机制,用于管理用户的图片上传操作,确保在...

    Android Service 实现下载,前台、通知栏同步更新

    在Android应用开发中,Service是用于执行长时间运行操作的一个组件,比如后台下载任务。本教程将详细介绍如何使用Android Service来实现文件下载,并在前台显示进度,同时通过通知栏同步更新下载进度。 首先,我们...

    android通过Service实现消息推送(客户端+服务器)

    `Service`是Android四大组件之一,它在后台执行长时间运行的操作,不提供用户界面。在消息推送场景中,我们可以创建一个`Service`,使其周期性地向服务器发送请求,获取新消息。 1. **创建Service** 创建一个新的`...

    android执行adb shell命令源码

    在Android开发中,`adb (Android Debug Bridge)` 是一个强大的工具,用于与连接到电脑的Android设备进行通信。...通过深入研究`android-native-exe-demo-master (copy)`这样的示例项目,可以更好地学习和掌握这些技术。

    android service使用小demo

    android service使用的小demo 包括startService stopService bindService unbindService 两种开启、关闭service的小demo

    Android后台开启服务默默拍照

    Android Service是Android四大组件之一,它允许应用在没有用户交互的情况下运行,这对于需要长时间运行的任务非常有用。在这个场景中,我们讨论的是如何在后台启动一个服务来执行拍照操作。 首先,我们需要创建一个...

    Android Service无图标/界面独立运行

    1、startService开启服务以后,与activity就没有关联,不受影响,独立运行,需要stopService关闭,否则Activity移除栈后将一直运行(kill杀不死). 2、bindService开启服务以后,与activity存在关联,退出activity时...

    Android_Service通信

    Android下的服务与其他组件之间的通信,跨进程通信等示例。具体可以参见博客:http://www.cnblogs.com/plokmju/p/android_ServiceCommunication.html

    编写Android Service服务的一个源码例子

    在Android应用开发中,Service是四大组件之一,它在后台长时间运行,即使用户与应用程序的交互界面已经关闭。Service主要用于执行耗时的操作,如音乐播放、网络通信等。本源码例子将帮助初学者理解如何在Android项目...

    Android下用Exec执行linux命令的源代码

    Android下用Exec执行linux命令的源代码,还可以在应用中执行init.rc中服务,具体怎么执行服务的方法请见我博客的另一篇文章,上面有如何让Android应用启用init.rc中定义的服务的方法。

Global site tag (gtag.js) - Google Analytics