2011-08-26 11 views
8

Si supponga che ho 2 Applicazione A e B.Come risorse di un'altra applicazione

voglio accedere alle risorse (drawable, immagini, archi) di una domanda di B da un'applicazione. Come potrei farlo?

Edit:

È inoltre possibile designare un progetto Android come un progetto di libreria, che gli permette di essere condiviso con altri progetti che dipendono da esso. Una volta che un progetto Android è designato come progetto di biblioteca, non può essere installato su un dispositivo.

Significa che non posso usare la mia libreria sul mercato Android? Il mio obiettivo è utilizzare le risorse predefinite dell'Applicazione A, ma anche se qualcuno può scaricare l'Applicazione B e usarla.

+0

Perchè dovrebbe essere una buona idea? – Arafangion

+0

Non renderebbe il tuo codice illeggibile? –

risposta

20

Se sei lo sviluppatore di entrambe le applicazioni, l'approccio corretto sarebbe, come già notato, creare un progetto di libreria Android e condividerlo tra le app.

nevertheles, è ancora possibile accedere alle risorse da un'altra applicazione, anche se questa non è la vostra applicazione:

Resources res = context.getPackageManager().getResourcesForApplication("com.example.foo") 
+0

Alle risorse vengono assegnati ID che hanno modificato ogni compilation. Come posso accedervi tramite il nome? Vedere anche http://stackoverflow.com/questions/4593046/is-it-possibile-per-access-resources-in-another-apk-without-using-content-provider – elcuco

+1

Prova 'Resources.html # getIdentifier (..) ': (http://developer.android.com/reference/android/content/res/Resources.html#getIdentifier(java.lang.String,%20java.lang.String,%20java.lang.String) –

5

Se entrambe le applicazioni sono soli e si desidera raggruppare queste risorse al accumulo di tempo:

Creare un Android Library Project, mettere tutte le risorse necessarie in esso e fanno riferimento di entrambe le applicazioni.


Modifica per la modifica: È possibile utilizzare la libreria nel mercato Android. Non puoi semplicemente usarlo da solo (compilarlo). Devi costruire un'app che usi la libreria. Quando crei quell'app, tutti i contenuti necessari vengono sostanzialmente presi dalla libreria e copiati nel tuo apk. Che puoi mettere sul mercato come al solito.

Questo non funziona quando si desidera accedere alle risorse da un'app che viene scaricata sul dispositivo in fase di runtime. Un progetto di libreria raggruppa tutte le risorse quando si crea l'app che lo utilizza. La risposta di Peter Knego è corretta quando si accede a runtime.

+0

Ho modificato la domanda. Aggiunti alcuni dubbi dal tuo link. –

+0

Aggiunta risposta. :) –

+0

Grazie, Sì, voglio usarlo in fase di esecuzione, Userò la modalità di Peter Knego. –

1

È possibile che entrambe le applicazioni siano tue. Oppure puoi utilizzare qualsiasi libreria Android per entrambe queste applicazioni. Se vuoi, crea anche il tuo Android Library per questo tipo di lavoro. Thnx.

0

risposta di Pietro sopra è grande, ma mi piacerebbe elaborare un po 'di più ...

quando non controlli Appa e AppB e vuole ottenere un drawable da AppB, mentre in Appa, quindi effettuare le seguenti operazioni:

  1. ottenere l'identificatore del drawable quando in AppB (ad esempio,.210)
  2. Poi, in appa

    Resources res = context.getPackageManager().getResourcesForApplication("com.example.appB"); 
    
        Drawable d = res.getDrawable(integer); 
    //integer was what appB assigned to R.drawable.iconInAppB 
    

* Nota: L'id intero assegnato al R.drawable.iconInAppB cambia nel tempo in modo da non fare affidamento sulla hardcoding.Salvo le coppie chiave-valore (String nome_risorsa, intIdea risorsa) in un database in appB e le accedo tramite un provider di contenuti.

+0

Potrebbe essere spiegato il -1 per favore –

1

Per esempio, prendiamo la stringa-array con l'ID del entryvalues_font_size dal pacchetto com.android.settings

String[] enries = null; 
try { 
    // You can get PackageManager from the Context 
    Resources res = getPackageManager().getResourcesForApplication("com.android.settings"); 
    int resId = res.getIdentifier("entryvalues_font_size", "array", "com.android.settings"); 

    if (resId != 0) { 
     enries = res.getStringArray(resId); 
    } 
} 
catch (PackageManager.NameNotFoundException e) { 
    e.printStackTrace(); 
} 
Problemi correlati