2010-07-21 3 views
6

Di seguito è riportato il mio codice per creare un collegamento a un'applicazione selezionata. Non ho davvero alcun problema e l'applicazione funziona abbastanza bene.Creazione di una scorciatoia: come posso lavorare con un drawable come icona?

Il problema è che sono in grado di creare un collegamento con un ressource dalla mia applicazione:

intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(this, R.drawable.icon)); 

Ma mi piacerebbe davvero con un disegnabile personalizzato. (Drawable myDrawable = .....)

Come posso fare?

ResolveInfo launchable=adapter.getItem(position); 
    final Intent shortcutIntent = new Intent(); 
    ActivityInfo activity=launchable.activityInfo; 
    ComponentName name=new ComponentName(activity.applicationInfo.packageName,activity.name);  
    shortcutIntent.setComponent(name); 
    shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    final Intent intent = new Intent(); 
    intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); 
    // Sets the custom shortcut's title 
    intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, launchable.loadLabel(pm)); 
    // Set the custom shortcut icon 
    intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(this, R.drawable.icon)); 

    // add the shortcut 
    intent.setAction("com.android.launcher.action.INSTALL_SHORTCUT"); 
    sendBroadcast(intent); 
    finish(); 

Grazie molto per qualsiasi indizio

+0

ShortcutIconResource.fromContext (pkgContext, iconId) fare il tric K! http://stackoverflow.com/questions/17339231/create-shortcut-for-thrid-party-app-is-that-possible/17561676#17561676 – thecr0w

risposta

26

finalmente trovato una soluzione; Sono stato stupido da usare Intent.EXTRA_SHORTCUT_ICON_RESOURCE:

Ecco il codice corretto:

Drawable iconDrawable = (....); 
BitmapDrawable bd = (BitmapDrawable) iconDrawable; 
intent.putExtra(Intent.EXTRA_SHORTCUT_ICON, bd.getBitmap()); 
3

non posso commentare in quanto ho solo 23 reputazione, ma ho usato il codice ed è stato utile. Ma la mia immagine non ha scalato correttamente sul collegamento, così ho trovato due argomenti interessanti che possono completare la soluzione:

Per ottenere la dimensione corretta per un'icona di collegamento: https://stackoverflow.com/a/19003905/3741926

di scalare il disegnabile (utilizzando la dimensione che avete calcolato con la funzione precedente) https://stackoverflow.com/a/10703256/3741926

con tutto quello che ho ottenuto un collegamento con un'icona correttamente in scala, spero che vi aiuterà