0
点赞
收藏
分享

微信扫一扫

Android中跨包访问Preferences


我们可以在一个应用程序中创建并编辑一个Preferences,然后在另外一个应用程序中读取它。当然有个前提是该Preferences的权限至少是Context.MODE_WORLD_READABLE。

比如在包名为 com.teleca 应用程序A中有一个名叫 com.teleca_prefer 的Preferences:


final static String preferName="
    com.teleca_prefer
    ";
 
   
final static String KEY_TIP="tip";
 
  

    .......................................................
  
 
  
      
 
   
               
    Context.MODE_WORLD_READABLE)
    ;


我们可以在包名为com.teleca.robin应用程序B中这样读取它:


private SharedPreferences prefsWorldRead;
 
   
final static String preferName="
    com.teleca_prefer
    ";
 
   
final static String KEY_TIP="tip";
 
  
....................................................................
 
  
        if(prefsWorldRead ==null)
 
   
        {
 
   
        Context otherContext=null;
 
   
        try {
 
   
otherContext =createPackageContext("
    com.teleca
    ", 
    Context.CONTEXT_IGNORE_SECURITY
    );
 
   
} catch (NameNotFoundException e) {
 
   
// TODO Auto-generated catch block
 
   
e.printStackTrace();
 
   
}
 
   
            prefsWorldRead = otherContext.getSharedPreferences(preferName,
 
   
                    Context.MODE_WORLD_READABLE);
 
   
        }
 
   
            String tip=prefsWorldRead.getString(KEY_TIP, "null2");


createPackageContext 为Context的方法, " com.teleca " 为A应用程序的包名, " com.teleca_prefer " 为你要读取的A应用程序的 Preferences 名字。


public abstract ContextcreatePackageContext (StringpackageName, int flags)


API Level 1


Return a new Context object for the given application name. This Context is the same as what the named application gets when it is launched, containing the same resources and class loader. Each call to this method returns a new instance of a Context object; Context objects are not shared, however they share common state (Resources, ClassLoader, etc) so the Context instance itself is fairly lightweight.

PackageManager.NameNotFoundException if there is no application with the given package name.SecurityException if the Context requested can not be loaded into the caller's process for security reasons (see CONTEXT_INCLUDE_CODE for more information}.


Parameters

packageName

Name of the application's package.

flags

CONTEXT_INCLUDE_CODE or CONTEXT_IGNORE_SECURITY.


Returns
  • A Context for the application.


Throws



java.lang.SecurityException


if there is no application with the given package name

PackageManager.NameNotFoundException

举报

相关推荐

0 条评论