怎么测试带有shareduserid的android应用

2026年09月25日 18:42
有1个网友回答
网友(1):

1 首先在两个程序的Manifest文件中的manifest节点下面设置相同的sharedUserId,比如: android:sharedUserId="com.test"。
2 在需要获取数据的程序中创建另外一个程序的上下文引用Context,
Context context = createPackageContext("com.excellence.weather", Context.CONTEXT_IGNORE_SECURITY);其中的第一个参数是另外一个程序的包命,这样就可以利用这个Context像访问自己程序的资源一样访问被共享的程序的资源,例如:
SharedPreferences sharedPreferences = context.getSharedPreferences(SHAREDPREFERENCES_USERINFO, Context.MODE_WORLD_READABLE);
mDefaultUnit = sharedPreferences.getString(SHAREDPREFERENCES_USERINFO_NODE_UNIT, "c");

这样就可以得到被共享程序中的一些配置信息。
访问数据库方法类似:
String file = context.getDatabasePath("weather.db").getAbsolutePath();
Log.e(TAG, "database path : " + file);//从这句打印就可以看出他访问的是被共享程序的数据库文件。
SQLiteDatabase db = SQLiteDatabase.openDatabase(file, null, SQLiteDatabase.OPEN_READWRITE, new DatabaseErrorHandler()
{
public void onCorruption(SQLiteDatabase dbObj)
{
// TODO Auto-generated method stub
Log.e(getClass().getSimpleName(), "database error");
}
});
Cursor cursor = db.query("weatherinfo", new String[] { "city" }, "isdefault=?", new String[] { "1" }, null, null, null);
if (cursor.moveToFirst())
{
mDefaultCityString = cursor.getString(0);
} else
{
mDefaultCityString = null;
Intent intent1 = new Intent(GetWeatherInfoTask.GET_WEATHER_FINISH_RECEIVE);
context.sendBroadcast(intent1);
}
cursor.close();
db.close();
Log.e(TAG, "===get default city ===" + mDefaultCityString);

就这样你就可以随意的读取被共享程序数据库中的数据了