共享来自插件的系统服务,以避免过多的权限请求

问题描述

| 在我的应用中,我有一些带有gps位置的对象。目前,我对它们所做的唯一一件事就是在地图上显示它们,但我计划实现需要了解用户位置的其他功能。我不想向我的应用添加位置权限,因为某些用户可能不想使用这些功能。 我的想法是拥有一个单独的apk(一种插件),该APK仅向主应用提供位置信息,因此只有该插件需要请求位置许可。 是否可以让插件直接共享系统服务(LocationManager),而无需使用不兼容的界面创建自定义服务,以便主应用可以使用插件的LocationManager。这将使得可以使用现有的类,例如MyLocationOverlay或其他类。主应用程序可以将ContextWrapper传递给这些类,如下所示:
public static class LocationContext extends ContextWrapper {

    public LocationContext(Context base) {
        super(base);
    }

    @Override
    public Object getSystemService(String name) {
        if (name.equals(LOCATION_SERVICE)) {
            // Return the LocationManager service of the plugin here...
        }
        return super.getSystemService(name);
    }

}
    

解决方法

        不知道我是否完全理解您的问题,但是一个应用程序可以从另一应用程序加载类,从而避免跨越进程边界。关键是两个ap的清单中具有相同的android:process和android:sharedUserId属性。然后,这些应用程序将在设备上的同一Linux进程中运行。然后,您可以使用反射API以编程方式从App B加载App A的类,反之亦然。如果市场上已经有App A,则可能需要发布一个添加了process和sharedUserId属性的新版本,然后发布具有这些相同属性的AppB。     ,        是的,这是可能的,但是我强烈建议Android OS工程师禁用此功能,也不要禁用使用其他2个友好(相同uuid,相同签名)应用程序的其他方式,因为这会导致严重的安全“漏洞”。权限系统中的问题以及Android安全中的严重问题... 试想一下3个友好的应用程序。第一个拥有连接到互联网的权限,仅此而已,第二个可以发送SMS消息,但仅此而已,第三个可以访问您的位置...。每个应用程序本身都相对无害...但是可以显示出什么内容因为他们被允许交流,所以他们都在一起做。     ,           是否可以让插件直接共享系统服务(LocationManager),而无需使用不兼容的界面创建自定义服务,以便主应用可以使用插件的LocationManager。 那将是不可能的。
LocationManager
不是
Parcelable
,因此您无法在进程之间传递它。   这将使得可以使用现有的类,例如MyLocationOverlay或其他类。 不。您没有写
MyLocationOverlay
。您不能强迫它使用您自己的设计的人造“ 1”字样。   主应用可以像这样将ContextWrapper传递给这些类
ContextWrapper
不是
Parcelable
,因此您不能在进程之间传递它。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...