记录开发经历-----AIDL实现APP关机功能

本文详细介绍了如何使用AIDL在Android中实现APP关机功能,涉及AIDL语法、服务端与客户端的创建,以及处理隐藏API的技巧,包括反射和替换android.jar。
摘要由CSDN通过智能技术生成

一、AIDL的语法

首先,介绍一下AIDL的语法。
AIDL的语法与Java的接口写法十分类似,甚至可以说一模一样,但也有细微的区别,总结如下:

  1. 不能使用private、public、protect修饰方法;
  2. 支持传递数据类型有:java基本数据类型(byte、short、int、long、float、double、char、boolean)、String、CharSequence、List(接收方必须是ArrayList)、Map(接收方必须是HashMap)、其他AIDL定义的AIDL接口、实现Parcelable序列化的类;
  3. .其他AIDL定义的AIDL接口和实现Parcelable序列化的类必须import,即使在相同包结构下,其余的类型不需要import;
  4. 对于非基本数据类型,也不是String和CharSequence类型的,需要有方向指示,包括in、out和inout,in表示由客户端设置,out表示由服务端设置,inout是两者均可设置。

二、AIDL使用

AIDL的使用分为服务端和客户端,由服务端创建service。首先我们来实现服务端的创建和AIDL创建。

注意

基本开发流程:先开发Service端,后开发Client端
使用AndroidStudio创建AidlDemo工程后,再在里面创建Service Module和Client Module,不用管默认的app Module

如下图,右键New创建AIDL文件,会直接生成一个AIDL模板类IService.aidl。

@赵弋

Service端

包名: com.studyhelper.aidl

1、创建aidl文件,如:IMyAidlInterface.aidl,新增接口,void PowerOff();

2、检查build/generated/source/aidl/debug下是否存在对应的java文件,若无则Rebuild Project

3、创建继承于android.app.Service的Service类,如:MyService.java,并实现必须要实现的onBind方法

package com.studyhelper.aidl;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;


import static android.content.Intent.ACTION_REQUEST_SHUTDOWN;
import static android.content.Intent.EXTRA_KEY_CONFIRM;


public class MyService extends Service {
   
        public MyService() {
   
        }

    @Override
    public IBinder onBind(Intent intent) {
   
        // TODO: Return the communication channel to the service.
        return iMyAidlInterface;
    }
    private IMyAidlInterface.Stub iMyAidlInterface=new IMyAidlInterface
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值