2017-10-26 10 views
5

他のアプリケーションから文字列リソースを取得したいとします。アプリはAndroid PackageInstaller(おそらくSystemアプリ)で、取得したい文字列には複数の言語バージョン(ここではソースコード>Link)があります。だから、Package Installer'sリソースディレクトリは次のようになります。私はvaluesフォルダから文字列permission_warning_templateを取得したい別のアプリケーションから文字列リソースを取得する

enter image description here

(私は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"); 

    } 
} 

ありがとうございます。

+2

私はそれが可能ではありません。なぜあなたは自分のアプリにこれらのリソースを含めるだけですか? – gustyaquino

+0

これはできません:アプリはAndroidでサンドボックス化されています。 https://developer.android.com/training/articles/security-tips.htmlをご覧ください。 – Robert

答えて

3

あなたは実際にあなたの問題をほぼ解決しました。あなたが他のアプリケーションのリソースを取得したので、このresオブジェクトでget{Something}に電話するだけで、正確なリソースが得られます。

は、だから私はこの方法で試してみました:

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(); 
    } 
} 

をそして

を得ました%2 $ sに%1 $ sに許可しますか?

あなたが探しているものはまさに私が推測しているものです。

関連する問題