`

不能再通过createPackageContext来访问另外一个应用的资源(Sharepreference)

阅读更多
以前我们可以通过createPackageContext来访问另外一个应用的资源(Sharepreference),但Android 7.0以后为了安全性,丢弃了这种方式了
PS:
/**
     * File creation mode: allow all other applications to have read access to
     * the created file.
     * <p>
     * As of {@link android.os.Build.VERSION_CODES#N} attempting to use this
     * mode will throw a {@link SecurityException}.
     *
     * @deprecated Creating world-readable files is very dangerous, and likely
     *             to cause security holes in applications. It is strongly
     *             discouraged; instead, applications should use more formal
     *             mechanism for interactions such as {@link ContentProvider},
     *             {@link BroadcastReceiver}, and {@link android.app.Service}.
     *             There are no guarantees that this access mode will remain on
     *             a file, such as when it goes through a backup and restore.
     * @see android.support.v4.content.FileProvider
     * @see Intent#FLAG_GRANT_WRITE_URI_PERMISSION
     */
    @Deprecated
    public static final int MODE_WORLD_READABLE = 0x0001;

若再尝试使用MODE_WORLD_READABLE 这种方式来建立SharePreference 会报SecurityException。

01-08 05:32:21.465 16339 16339 E AndroidRuntime: Caused by: java.lang.SecurityException: MODE_WORLD_READABLE no longer supported
01-08 05:32:21.465 16339 16339 E AndroidRuntime:        at android.app.ContextImpl.checkMode(ContextImpl.java:2134)
01-08 05:32:21.465 16339 16339 E AndroidRuntime:        at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:354)
01-08 05:32:21.465 16339 16339 E AndroidRuntime:        at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:349)
01-08 05:32:21.465 16339 16339 E AndroidRuntime:        at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:164)
01-08 05:32:21.465 16339 16339 E AndroidRuntime:        at com.android.deskclock.Utils.getCESharedPreferences(Utils.java:778)
01-08 05:32:21.465 16339 16339 E AndroidRuntime:        at com.android.deskclock.settings.DefaultAlarmToneDialog.<init>(DefaultAlarmToneDialog.java:74)
分享到:
评论

相关推荐

    通过createPackageContext 实现皮肤打包成apk的demo

    总的来说,通过`createPackageContext`实现皮肤打包成apk是一种巧妙的解决方案,它让应用的皮肤可以像模块一样独立存在和更新。不过,这也需要开发者具备深入的Android系统知识,以确保安全性和性能。在实际项目中,...

    Android获取其他应用中的assets资源

    我们可以使用createPackageContext方法来获取其他应用程序的Context,这个方法需要传入要获取Context的应用程序的包名和一个标志参数。 在获取了其他应用程序的Context之后,我们可以通过获取Resource类来获取对应...

    android加载未安装apk资源

    Android应用程序由一个或多个APK文件组成,每个APK文件包含代码、资源和元数据。当APK被安装到设备上,Android系统会解析APK,将资源加载到Android Asset Packaging Tool (AAPT)生成的R类中,便于程序访问。然而,...

    Android高级应用源码-更换软件主题(zip方式).zip

    总结来说,这个资源提供了一种动态更换Android应用主题的方法,通过解压和应用ZIP文件来实现。这种方法涉及到Android的资源管理、文件操作以及Context的理解,是提高应用用户体验的一个实用技巧。

    Android开发 系统信息 6 网络数据开关 给应用定制皮肤

    提供的代码示例展示了一个方法`setMobileDataEnabled(boolean enabled)`,它尝试通过获取`TelephonyManager`服务的私有接口`ITelephony`来控制数据连接。具体步骤如下: 1. 获取`TelephonyManager`实例。 2. 使用...

    Android高级应用源码-更换软件主题(apk方式).zip

    当主题apk被下载后,可以使用`Context.createPackageContext()`方法来加载apk中的资源,并用新的资源替换当前应用的资源。 6. **安全与兼容性**:确保主题APK遵循Android的资源命名规则,避免与主应用冲突。同时,...

    sharePreferences相关文档

    要使用 `SharePreference`,首先需要通过 `Context` 对象来获取一个 `SharedPreferences` 实例。可以通过调用 `Context.getSharedPreferences(String name, int mode)` 方法来实现。 ```java SharedPreferences ...

    移动应用开发:保存全局参数 .pptx

    (2)如果应用B要读写访问A应用中的Preference,前提条件是A应用中该preference创建时指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE权限,代表其他的应用能访问读取或者写入。首先要在B中创建...

    Android 实现皮肤打包成apk的demo.zip

    当我们谈论将皮肤打包成apk,实际上意味着我们将皮肤资源作为一个独立的应用组件来处理。 **步骤1:创建皮肤资源** 1. 创建一个新的Android项目,用于存放皮肤资源,如图片、颜色值、样式等。这些资源应与主应用中...

    Android代码-实现皮肤打包成apk的demo.zip

    - 使用`Context.createPackageContext()`方法创建一个新的Context,这个新Context可以访问皮肤APK中的资源。 3. **替换主题资源**: - 通过新的Context,我们可以获取到皮肤APK中的颜色、图片等资源ID,然后替换...

    Android 实现皮肤打包成apk的demo.rar

    - 获取皮肤资源:安装后,可以通过`Context.createPackageContext()`方法获取到皮肤apk的上下文,然后使用这个上下文加载资源。 4. **切换皮肤** - 设计接口:创建一个接口,提供更换皮肤的方法,如`changeSkin...

    android context理解

    通过`createPackageContext`方法,你可以指定一个包名来获取该包的`Context`实例。 ```java try { Context ctx = createPackageContext("com.example.otherapp", 0); } catch (NameNotFoundException e) { // ...

    android换肤功能 如何动态获取控件中背景图片的资源id?

    通过`getContext().createPackageContext(packageName, Context.CONTEXT_IGNORE_SECURITY)`,可以创建一个指向皮肤包的Context对象,这样就可以访问皮肤包中的资源。 3. **获取皮肤包中的资源ID**: 使用`apk....

    android 皮肤demo

    这可能需要使用到`Context.createPackageContext()`方法,它能创建一个针对特定包的新Context,然后通过这个Context获取相应的资源。 3. 更新UI:遍历所有需要更换样式的组件,重新设置它们的颜色、图片等属性,或者...

    Runtime-Resource-overlay-Overlay-Package:使用运行时资源覆盖添加和更新android资源

    总结,运行时资源覆盖是Android开发中的一个强大工具,它让开发者可以在不更新主应用的情况下进行资源的动态修改。通过理解其工作原理和实现方式,开发者可以灵活地实现应用的个性化和动态更新,提高用户体验。然而...

    Android 应用更换皮肤实现方法

    核心思路是将皮肤资源打包为一个APK文件,然后在主应用中通过特定的方式读取并应用这些资源。 #### 读取皮肤包APK的数据条件 1. **相同签名**:两个APK文件必须具有相同的签名。这是APK之间进行资源共享的先决条件...

    SharedPreferencesDemo

    首先,我们需要知道目标应用的包名,然后使用`Context`的`createPackageContext()`方法创建一个与目标应用相同上下文的Context对象。接着,利用这个新创建的Context,调用`getSharedPreferences()`方法。 2. **...

    Android Context使用例子.

    在Android开发中,`Context`是一个非常核心的概念,它就像是应用程序的一个全局环境或者上下文,提供了与系统服务交互的能力。`Context`的理解和正确使用对于编写健壮的Android应用至关重要。下面将详细介绍`Context...

    Android实现换肤的两种思路分析

    只有当两个APK的签名一致,并且它们的AndroidManifest.xml中配置了相同的sharedUserId属性时,这两个APK才能运行在同一个进程中,从而相互访问资源。 此外,还可以使用自定义文件扩展名(如mja、sga)来存放皮肤...

    Android获取应用程序大小的方法

    通过`getPackageSizeInfo`方法或反射调用,你可以得到一个`PackageStats`对象,从而获取应用的总大小。 4. **权限问题**: 访问系统目录,如`/data/app`和`/system/app`,可能需要更高的权限,通常是root权限。...

Global site tag (gtag.js) - Google Analytics