歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android下增加service和對應的AIDL

Android下增加service和對應的AIDL

日期:2017/3/1 10:27:01   编辑:Linux編程

在Android中,應用訪問service提供的接口都是通過AIDL(Android Interface Definition Language),可以理解為一種規范,甚至可以粗陋的理解為C語言裡面的.h文件,如果你曾經是一名C語言開發者,而且只是使用的話。下面的例子是想增加獲取cpu 頻率的service及其對應的AIDL,其中並沒有實際的讀取頻率和設置governor的操作,僅僅用於演示如何在framework中增加一個service和AIDL。

1) 增加AIDL接口文件

文件:frameworks/base/core/java/android/os/ICpuFreqService.aidl

package android.os;

import android.os.WorkSource;

/** @hide */

interface ICpuFreqService

{

int getCurGovernor();

int getCurFrequency();

}

2) 在Android.mk中增加ICpuFreqService.aidl接口文件的編譯選項

文件:frameworks/base/Android.mk

LOCAL_SRC_FILES += \

……….

core/java/android/os/ICpuFreqService.aidl\

……..

3) 實現CpuFreqService.java

文件:frameworks/base/services/java/com/android/server$ ls CpuFreqService.java

package com.android.server;

import android.os.ICpuFreqService;

class CpuFreqService extendsICpuFreqService.Stub{

static int EnterTimes=0;

public int getCurGovernor()

{

return0x11233;

}

public int getCurFrequency()

{

EnterTimes++;

return (EnterTimes*50);

}

}

4) 在SystemService中注冊service

文件:frameworks/base/services/java/com/android/server/SystemServer.java

CpuFreqService cpufreq=null;

………………

Slog.i(TAG, "CpuFreq Manager");

cpufreq = new CpuFreqService();

ServiceManager.addService("cpufreq",cpufreq);

5) 在APP中調用AIDL接口

…………….

import android.os.ServiceManager;

import android.os.ICpuFreqService;

……………...

try {

ICpuFreqService cpuFreq=

ICpuFreqService.Stub.asInterface( ServiceManager.getService("cpufreq"));

setSummaryText("baseband_version",Integer.toString(cpuFreq.getCurGovernor()));

Log.e("Status","Governor=" + Integer.toString(cpuFreq.getCurGovernor()));

Log.e("Status","Freq ="+ Integer.toString(cpuFreq.getCurFrequency()));

} catch (Exception e)

{

}

Copyright © Linux教程網 All Rights Reserved