0

在我的应用程序中,我有一些带有 gps 位置的对象。目前我对它们唯一做的就是在地图上显示它们,但我计划实现其他需要知道用户位置的功能。我不想将位置权限添加到我的应用程序,因为某些用户可能不想使用这些功能。

我的想法是有一个单独的 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);
    }

}
4

3 回答 3

2

不确定我是否完全理解您的问题,但一个应用程序可以从另一个应用程序加载类,从而避免跨越进程边界。关键是在两个应用程序的清单中具有相同的 android:process 和 android:sharedUserId 属性。然后应用程序将在设备上的同一 Linux 进程中运行。然后,您可以使用反射 API 以编程方式从 App B 加载 App A 的类,反之亦然。如果 App A 已经上市,您可能需要发布一个添加了 process 和 sharedUserId 属性的新版本,然后发布具有这些相同属性的 App B。

于 2011-06-14T23:09:07.530 回答
1

是的,这是可能的,但是我强烈建议 Android 操作系统工程师禁用此功能以及使用其他功能的 2 个友好(相同 uuid,相同签名)应用程序的任何其他方式),因为这会导致严重的安全“漏洞” Android安全中的权限系统和严重问题...

想象一下 3 个友好的应用程序。第一个具有连接互联网的权限,仅此而已,第二个可以发送短信但仅此而已,第三个可以访问您的位置....每个应用程序本身都相对无害...但是您可以想象一下与他们一起做,因为他们被允许交流。

于 2012-11-08T18:49:48.040 回答
0

是否可以让插件直接共享一个系统服务(LocationManager),而无需创建具有不兼容接口的自定义服务,以便主应用程序可以使用插件的LocationManager。

那将是不可能的。LocationManageris not Parcelable,所以你不能在进程之间传递它。

这将使使用现有类(如 MyLocationOverlay 或其他类)成为可能。

不。你没有写MyLocationOverlay。你不能强迫它使用LocationManager你自己设计的一些仿制品。

主应用程序可以像这样将 ContextWrapper 传递给这些类

ContextWrapperis not Parcelable,所以你不能在进程之间传递它。

于 2011-06-14T22:56:01.027 回答