所以我想从另一个应用程序中检索一个字符串资源。该应用程序是Android PackageInstaller (很可能是System应用程序),我要检索的字符串有多种语言版本(源代码这里> 链接)。所以Package Installer's资源目录如下所示:

我想从permission_warning_template文件夹中检索字符串values (我意识到Android将自动确定当前语言,并将获取该语言的值,但我可能错了)。
这是我编写的两个方法(最小、完整和可验证的示例),两者都不起作用。有可能吗?怎么做呢?
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");
}
}谢谢。
发布于 2017-11-02 22:35:49
所以你几乎解决了你的问题。当您撤回另一个应用程序的资源时,只需在这个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();
}
}得到了
允许%1$s到%2$s?
我猜这正是你要找的。
https://stackoverflow.com/questions/46957101
复制相似问题