所以我想从另一个应用程序中检索字符串资源.该应用程序是Android PackageInstaller(很可能是一个System应用程序),我想要检索的字符串有多种语言版本(源代码在这里> 链接).所以Package Installer's资源目录如下所示:
我想permission_warning_template从values文件夹中检索String (我意识到Android将自动确定当前语言并将获取该语言的值,但我可能错了).
这些是我写的两种方法(Minimal,Complete和Verifiable示例),但都不起作用.它甚至可能吗?如何完成它?
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//First Try
testUseAndroidString();
//Second Try
Resources res = null;
try {
res = getPackageManager().getResourcesForApplication("com.android.packageinstaller");
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
if(null != res) {
int sId = res.getIdentifier("com.android.packageinstaller:string/permission_warning_template", null, null);
if(0 != sId) {
Log.d("TagLet", res.getString(sId));
}
}
}
public void testUseAndroidString() {
Context context = this;
Resources res;
try {
res = context.getPackageManager().getResourcesForApplication("com.android.packageinstaller");
int resourceId = res.getIdentifier("com.android.packageinstaller:string/permission_warning_template", null, null);
if(0 != resourceId) {
CharSequence s = context.getPackageManager().getText("com.android.packageinstaller:string/permission_warning_template", resourceId, null);
Log.d("TagLet", "resource=" + s);
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
Log.d("TagLet", "FAIL");
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
所以你实际上几乎解决了你的问题。当您检索了另一个应用程序的资源时,您只需调用get{Something}该res对象,即可获得确切的资源。
所以我尝试了这个方法:
public void testUseAndroidString() {
Context context = this;
Resources res;
try {
res = context.getPackageManager().getResourcesForApplication("com.android.packageinstaller");
int resourceId = res.getIdentifier("com.android.packageinstaller:string/permission_warning_template", null, null);
if(0 != resourceId) {
String s = res.getString(resourceId);
Log.d("TagLet", "resource=" + s);
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
并得到了
允许 %1$s 访问 %2$s 吗?
我想这正是您正在寻找的。