2017-10-26 19 views
5

इसलिए मैं किसी अन्य ऐप से एक स्ट्रिंग संसाधन पुनर्प्राप्त करना चाहता हूं। ऐप Android PackageInstaller (संभवतः System ऐप) है और जिस स्ट्रिंग को मैं पुनर्प्राप्त करना चाहता हूं, उसके पास कई भाषा संस्करण हैं (स्रोत कोड यहां>Link)। तो Package Installer's संसाधन निर्देशिका इस तरह दिखता है:एक और ऐप से स्ट्रिंग संसाधन पुनर्प्राप्त करें

enter image description here

मैं values फ़ोल्डर से स्ट्रिंग permission_warning_template प्राप्त करना चाहते हैं (मुझे लगता है कि एंड्रॉयड स्वचालित रूप से वर्तमान भाषा का निर्धारण करेगा और मुझे उस भाषा के मूल्य लायेगा, लेकिन मैं हो सकता है गलत हो)।

ये 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

Thats संभव नहीं है: ऐप्स एंड्रॉइड में sandboxed हैं। Https://developer.android.com/training/articles/security-tips.html देखें – Robert

उत्तर

3

तो आप वास्तव में लगभग अपनी समस्या हल कर चुके हैं। चूंकि आपके पास किसी अन्य एप्लिकेशन के संसाधनों को पुनः प्राप्त किया गया है, इसलिए आपको पर इस 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% 2 $ s को $ s की अनुमति दें?

जो मुझे लगता है वह वही है जो आप खोज रहे हैं।

संबंधित मुद्दे