為Android中PackageManagerService添加方法,androidsdkmanager

來源:互聯網
上載者:User

為Android中PackageManagerService添加方法,androidsdkmanager
PackageManagerService相關類結構


分析從可以看出若想為PackageManagerService添加方法需要進行以下改動1,在IPackageManager.aidl檔案中增加方法的聲明;2,在PackageManager類中增加抽象方法說明;3,在ApplicationPackageManager中增加方法,具體實現為調用遠程PackageManagerService的方法;4,在PackageManagerService中增加方法的具體實現;
註:由於MockPackageManager類也繼承了PackageManager類,故也需要加入一些實現的代碼;增加的方法要設定為hide,或者更改API-List加入新增加的方法


Demo

目標:在PackageManagerService加入方法public String getHello();

第一步:在IPackageManager.aidl增加getHello()方法聲明

interface IPackageManager {    PackageInfo getPackageInfo(String packageName, int flags);    int getPackageUid(String packageName);    int[] getPackageGids(String packageName);        String[] currentToCanonicalPackageNames(in String[] names);    String[] canonicalToCurrentPackageNames(in String[] names);    PermissionInfo getPermissionInfo(String name, int flags);        List<PermissionInfo> queryPermissionsByGroup(String group, int flags);        PermissionGroupInfo getPermissionGroupInfo(String name, int flags);        List<PermissionGroupInfo> getAllPermissionGroups(int flags);        ApplicationInfo getApplicationInfo(String packageName, int flags);    ActivityInfo getActivityInfo(in ComponentName className, int flags);    ActivityInfo getReceiverInfo(in ComponentName className, int flags);    .    .      .    .    .    .    String getHello();}


第二步:PackageManager類中增加抽象方法說明

public abstract class PackageManager {    /**     * This exception is thrown when a given package, application, or component     * name can not be found.     */    public static class NameNotFoundException extends AndroidException {        public NameNotFoundException() {        }        public NameNotFoundException(String name) {            super(name);        }    }    .    .    .    .    .    .    /**     * @hide     */    public abstract String getHello();}

第三步:在PackageManagerService中增加getHello()方法的具體實現
public class PackageManagerService extends IPackageManager.Stub {    static final String TAG = "PackageManager";    static final boolean DEBUG_SETTINGS = false;    private static final boolean DEBUG_PREFERRED = false;    static final boolean DEBUG_UPGRADE = false;    private static final boolean DEBUG_INSTALL = false;    private static final boolean DEBUG_REMOVE = false;    private static final boolean DEBUG_SHOW_INFO = false;    private static final boolean DEBUG_PACKAGE_INFO = false;    .    .    .    .    .    .    .    public String getHello(){        return "Hello,PMS";    }}

第四步:在ApplicationPackageManager中增加getHello()方法,具體實現為調用遠程PackageManagerService的getHello()方法
final class ApplicationPackageManager extends PackageManager {    private static final String TAG = "ApplicationPackageManager";    private final static boolean DEBUG = false;    private final static boolean DEBUG_ICONS = false;    @Override    public PackageInfo getPackageInfo(String packageName, int flags)            throws NameNotFoundException {        try {            PackageInfo pi = mPM.getPackageInfo(packageName, flags);            if (pi != null) {                return pi;            }        } catch (RemoteException e) {            throw new RuntimeException("Package manager has died", e);        }        throw new NameNotFoundException(packageName);    }    @Override    public String[] currentToCanonicalPackageNames(String[] names) {        try {            return mPM.currentToCanonicalPackageNames(names);        } catch (RemoteException e) {            throw new RuntimeException("Package manager has died", e);        }    }    .    .    .    .    .    .    .        /**     * @hide     */    @Overridepublic String getHello() {// TODO Auto-generated method stubtry {return mPM.isThirdParty(name);} catch (RemoteException e) {throw new RuntimeException("Package manager has died", e);}}}


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.