他のアプリケーションから文字列リソースを取得したいとします。アプリはAndroid PackageInstaller
(おそらくSystem
アプリ)で、取得したい文字列には複数の言語バージョン(ここではソースコード>Link)があります。だから、Package Installer's
リソースディレクトリは次のようになります。私はvalues
フォルダから文字列permission_warning_template
を取得したい別のアプリケーションから文字列リソースを取得する
(私はAndroidが自動的に現在の言語を決定し、私はその言語の値を取得することを実現するが、私はかもしれません間違っている)。
これらは私が書いた2つの方法(最小、完全、および検証可能な例)であり、どちらも機能しません。それも可能ですか?それをどうやってやるの?
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");
}
}
ありがとうございます。
私はそれが可能ではありません。なぜあなたは自分のアプリにこれらのリソースを含めるだけですか? – gustyaquino
これはできません:アプリはAndroidでサンドボックス化されています。 https://developer.android.com/training/articles/security-tips.htmlをご覧ください。 – Robert