Android开发之AIDL的使用一--跨应用启动Service

摘要:
启动其他App的服务,跨进程启动服务。与启动本应用的Service一样,使用startService方法不同的是intent需要携带的内容不同,需要使用intent的setComponent()方法。即,第一个参数传入要启动的其他app的包名,第二个参数传入的时候要启动的其他app的service名。看下面的例子:aidlserviceapp应用:1packagecom.example.aidlserviceapp;23importandroid.app.Activity;4importandroid.content.ComponentName;5importandroid.content.Intent;6importandroid.os.Bundle;7importandroid.view.View;8importandroid.view.View.OnClickListener;9importandroid.widget.Button;1011publicclassMainActivityextendsActivityimplementsOnClickListener{1213privateButtonbtn_StartService,btn_StopService;14IntentserviceIntent=null;1516@Override17protectedvoidonCreate{18super.onCreate;19setContentView;20serviceIntent=newIntent();21ComponentNamecomponentName=newComponentName;23serviceIntent.setComponent;//使用intent的setComponent()方法,启动其他应用的组件。2425btn_StartService=findViewById;26btn_StopService=findViewById;2728btn_StartService.setOnClickListener;29btn_StopService.setOnClickListener;3031}3233@Override34publicvoidonClick{35switch{36caseR.id.btn_StartService:37startService;38break;39caseR.id.btn_StopService:40stopService;41break;42default:43break;44}45}46}aidlservice应用1packagecom.example.aidlservice;23importandroid.app.Service;4importandroid.content.Intent;5importandroid.os.IBinder;6importandroid.util.Log;78publicclassMyServiceextendsService{9publicstaticfinalStringTAG="aidlservice";1011@Override12publicIBinderonBind{13returnnull;14}1516@Override17publicvoidonCreate(){18super.onCreate();19Log.e;20}2122@Override23publicvoidonDestroy(){24super.onDestroy();25Log.e;26}2728}同时添加MyService在该应用的manifest。结果如下图,启动成功。

启动其他App的服务,跨进程启动服务。

与启动本应用的Service一样,使用startService(intent)方法

不同的是intent需要携带的内容不同,需要使用intent的setComponent()方法。

setComponent()方法需要传入两个参数,第一个参数是包名,第二个参数是组件名。即,第一个参数传入要启动的其他app的包名,第二个参数传入的时候要启动的其他app的service名。

看下面的例子:(aidlserviceapp应用通过button启动aidlservice应用MyService

aidlserviceapp应用:

1 packagecom.example.aidlserviceapp;
2 
3 importandroid.app.Activity;
4 importandroid.content.ComponentName;
5 importandroid.content.Intent;
6 importandroid.os.Bundle;
7 importandroid.view.View;
8 importandroid.view.View.OnClickListener;
9 importandroid.widget.Button;
10 
11 public class MainActivity extends Activity implementsOnClickListener {
12 
13     privateButton btn_StartService, btn_StopService;
14     Intent serviceIntent = null;
15 
16 @Override
17     protected voidonCreate(Bundle savedInstanceState) {
18         super.onCreate(savedInstanceState);
19 setContentView(R.layout.activity_main);
20         serviceIntent = newIntent();
21         ComponentName componentName = newComponentName(
22                 "com.example.aidlservice", "com.example.aidlservice.MyService");
23         serviceIntent.setComponent(componentName); //使用intent的setComponent()方法,启动其他应用的组件。
24 
25         btn_StartService =(Button) findViewById(R.id.btn_StartService);
26         btn_StopService =(Button) findViewById(R.id.btn_StopService);
27 
28         btn_StartService.setOnClickListener(this);
29         btn_StopService.setOnClickListener(this);
30 
31 }
32 
33 @Override
34     public voidonClick(View v) {
35         switch(v.getId()) {
36         caseR.id.btn_StartService:
37 startService(serviceIntent);
38             break;
39         caseR.id.btn_StopService:
40 stopService(serviceIntent);
41             break;
42         default:
43             break;
44 }
45 }
46 }

aidlservice应用

1 packagecom.example.aidlservice;
2 
3 importandroid.app.Service;
4 importandroid.content.Intent;
5 importandroid.os.IBinder;
6 importandroid.util.Log;
7 
8 public class MyService extendsService {
9     public static final String TAG = "aidlservice";
10 
11 @Override
12     publicIBinder onBind(Intent intent) {
13         return null;
14 }
15 
16 @Override
17     public voidonCreate() {
18         super.onCreate();
19         Log.e(TAG, "其他应用服务启动");
20 }
21 
22 @Override
23     public voidonDestroy() {
24         super.onDestroy();
25         Log.e(TAG, "其他应用服务停止");
26 }
27 
28 }

同时添加MyService在该应用的manifest。

1.启动aidlservice应用

2.启动aidlserviceapp应用

3.点击button,查看打印的log,是否启动了aidlservice应用的MyService服务。

结果如下图,启动成功。

Android开发之AIDL的使用一--跨应用启动Service第1张

免责声明:文章转载自《Android开发之AIDL的使用一--跨应用启动Service》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ssh登陆githubwebuploader分片文件上传下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Acrobat 软件注册过程记录

Adobe Acrobat XI安装过程详解 Adobe Acrobat是编辑pdf文档的不二选择,同时它的虚拟打印机功能平常使用也相当频繁,所以在日常工作中我经常使用Acrobat而不是Adobe Reader,下面是我亲自验证过的Acrobat安装过程,具体过程如下: 注:Adobe Acrobat之前版本为10.0版本,只支持英文版本,现在更新为11...

Windows常见窗口样式和控件风格

Windows常见窗口样式和控件风格 一、窗口样式WS_POPUP 弹出式窗口(不能与WS_CHILDWINDOW样式同时使用)WS_CHILDWINDOW 子窗口(不能与WS_POPUP合用)WS_MINIMIZE 创建窗口拥有最小化按钮WS_MINIMIZEBOX 创建窗口拥有最小化按钮,须同时指定WS_SYSTEM样式WS_VISIBLE 可见状态W...

[App Store Connect帮助]四、添加 App 图标、App 预览和屏幕快照(5)移除 App 预览或屏幕快照

您可以随时移除 App 预览,但仅可在 App 状态为可编辑时才能移除屏幕快照。要了解可编辑的状态,请前往 App 状态。 必要职能:“帐户持有人”职能、“管理”职能、“App 管理”职能或“营销”职能。请参见职能权限。 在首页上,点按“我的 App”,选择您的 App,然后在左列中点按平台版本。 在“App 预览和屏幕快照”部分的底部,点按“媒体管理”...

android平台中编写jni模块的方法(3)

这篇文章来说说ndk的使用方法,其实主要是关于ndk的一些编译选项的研究和翻译(其实人家google的文档已经说的很清楚了)。偶选用的测试环境是 slackware 12.0 + android 1.5 r1 for linux + jdk 1.6.0_12,ndk选用的是android 1.5 ndk r1这个版本的(直接解压就行,免安装的)。1、从nd...

Android 蓝牙开发(1)

普通蓝牙设备官方文档 Android 平台包含蓝牙网络堆栈支持,凭借此支持,设备能以无线方式与其他蓝牙设备交换数据。应用框架提供了通过 Android Bluetooth API 访问蓝牙功能的途径。使用 Bluetooth API Android 应用可以执行下面的操作: 扫描其他蓝牙设备 查询本地蓝牙适配器的配对蓝牙设备 建立 RFCOMM 通道...

文件下载之断点续传(客户端与服务端的实现)

原文:http://www.cnblogs.com/zhaopei/p/download.html 阅读目录   文件下载-服务端 使用a标签提供文件下载 使用Response.TransmitFile提供文件下载 其他方式文件下载 文件下载-客户端 直接下载 异步下载 断点续传 断点续传(服务端的支持) 多线程同时下载(分片下载) 前面讲了文件...