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

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

| 在我的应用中,我有一些带有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
,因此您不能在进程之间传递它。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?