【问题标题】:Two app with shared UserID两个具有共享 UserID 的应用程序
【发布时间】:2013-04-22 14:33:03
【问题描述】:

具有共享 UserID 的两个应用可以相互访问其他资源,例如可绘制对象或字符串吗?

他们可以访问彼此的资产吗?

他们可以启用或禁用对方的组件吗?

如果其中任何一种可能,请说明必须如何完成。

我搜索了很多,但找不到任何有关 userId 共享的示例。

【问题讨论】:

标签: android


【解决方案1】:

您可以在 AndroidManifest.xml 中使用android:sharedUserId 让您的应用程序与另一个应用程序共享相同的用户 ID。

android:sharedUserId

将与其他用户共享的 Linux 用户 ID 的名称 应用程序。默认情况下,Android 为每个应用程序分配自己的 唯一的用户 ID。但是,如果此属性设置为相同的值 对于两个或多个应用程序,它们都将共享相同的 ID — 前提是它们也由相同的证书签名。 具有相同用户 ID 的应用程序可以访问彼此的数据,如果 需要,在同一进程中运行。

注意它们需要用同一个证书签名。

共享同一个用户ID的两个应用程序可以访问彼此的资源。

例如:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.shareusertesta"
    android:versionCode="1"
    android:versionName="1.0" 
    android:sharedUserId="com.example">

然后我们可以通过以下方式初始化com.example 的新上下文:

Context friendContext = this.createPackageContext( "com.example",Context.CONTEXT_IGNORE_SECURITY);

并访问该应用程序的一些资源:

friendContext.getResources().getString(id);
friendContext.getResources().getDrawable(id);
friendContext.registerReceiver(...);

【讨论】:

  • 我收到android.content.pm.PackageManager$NameNotFoundException: Application package com.example not found。你是说完整的包名吗?
  • 来自 Android 文档,“共享用户 ID 会导致包管理器中的不确定行为。因此,强烈建议不要使用它,并且可能会在未来的 Android 版本中删除。相反,应用程序应该使用适当的通信机制,例如服务和内容提供者,以促进共享组件之间的互操作性。”
猜你喜欢
  • 2014-02-12
  • 2012-09-28
  • 1970-01-01
  • 1970-01-01
  • 2016-10-15
  • 2010-11-03
  • 2018-04-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多