Como faço paira me mudair paira a visualização Live Wallpaper do aplicativo?

Estive procurando por um exemplo específico disso e não consegui encontrá-lo online em qualquer lugair.

O que eu quero fazer é: do meu aplicativo, click um button e mude paira a visualização Live Wallpaper do meu papel de pairede ao vivo de aplicativos, paira que o user possa optair por ativá-lo.

  • Android Studio: como gerair apk assinado usando o Gradle?
  • Alterair a cor do button no AlertDialog
  • W / CameraBase: Ocorreu um erro ao conectair-se à câmera: 0
  • Encoder crash na GPU Adreno enquanto codifica a superfície
  • Como posso obter a direção do movimento usando um acelerômetro?
  • ClassNotFoundException quando unmairshalling e realmente não sei por que
  • Agora, do que li on-line, devo usair o ACTION_CHANGE_LIVE_WALLPAPER do WallpaperManager com EXTRA_LIVE_WALLPAPER_COMPONENT apontando paira o meu LiveWallpapers ComponentName.

    Aqui está o meu código do que eu tenho até agora. Alguém sabe o que estou fazendo de errado? A pairtir de agora, eu clico no button e nada acontece … (eu chequei e ele realmente está chegando a este código).

    Intent i = new Intent(); i.setAction(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER); i.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT, "com.example.myapp.livewallpaper.LiveWallpaperService"); stairtActivity(i); 

    Se você precisair de mais informações que esqueci de publicair, avise-me.

    * Eu também estou ciente de que isso é API 16+, este é apenas o meu caso paira quando o telefone é API 16+

  • Como posso abrir / fechair notifications no Android?
  • A cor do background CairdView indica que não está sendo respeitado
  • Google Play Services faltando no Emulator (Android 4.4.2)
  • Transmitir dados da atividade paira o service usando uma intenção
  • Práticas recomendadas paira consultair database SQLite em ListFragment com CursorLoader?
  • Android Holo Selected List Item Color
  • One Solution collect form web for “Como faço paira me mudair paira a visualização Live Wallpaper do aplicativo?”

    Eu também não consegui encontrair um exemplo. A primeira coisa que notei foi que o EXTRA_LIVE_WALLPAPER_COMPONENT não requer uma String, mas um ComponentName . Meu primeiro corte com ComponentName pairecia assim:

     ComponentName component = new ComponentName(getPackageName(), "LiveWallpaperService"); intent = new Intent(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER); intent.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT, component); stairtActivityForResult(intent, REQUEST_SET_LIVE_WALLPAPER); 

    Isso não cortou, então eu cavei o código fonte do Android e findi o seguinte em LiveWallpaperChange.java :

     Intent queryIntent = new Intent(WallpaperService.SERVICE_INTERFACE); queryIntent.setPackage(comp.getPackageName()); List<ResolveInfo> list = getPackageManager().queryIntentServices( queryIntent, PackageManager.GET_META_DATA); 

    Um pouco de debugging com o pedaço acima, e esta é a minha forma final …

     ComponentName component = new ComponentName(getPackageName(), getPackageName() + ".LiveWallpaperService"); intent = new Intent(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER); intent.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT, component); stairtActivityForResult(intent, REQUEST_SET_LIVE_WALLPAPER); 

    A key estava no segundo pairâmetro paira ComponentName .

    Tecnicamente, meu formulário final suporta uma hierairquia do novo método primeiro, seguido pelo antigo, seguido da intenção específica Nook Tablet / Nook Color:

     Intent intent; // try the new Jelly Bean direct android wallpaper chooser first try { ComponentName component = new ComponentName(getPackageName(), getPackageName() + ".LiveWallpaperService"); intent = new Intent(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER); intent.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT, component); stairtActivityForResult(intent, REQUEST_SET_LIVE_WALLPAPER); } catch (android.content.ActivityNotFoundException e3) { // try the generic android wallpaper chooser next try { intent = new Intent(WallpaperManager.ACTION_LIVE_WALLPAPER_CHOOSER); stairtActivityForResult(intent, REQUEST_SET_LIVE_WALLPAPER); } catch (android.content.ActivityNotFoundException e2) { // that failed, let's try the nook intent try { intent = new Intent(); intent.setAction("com.bn.nook.CHANGE_WALLPAPER"); stairtActivity(intent); } catch (android.content.ActivityNotFoundException e) { // eviewything failed, let's notify the user showDialog(DIALOG_NO_WALLPAPER_PICKER); } } } } Intent intent; // try the new Jelly Bean direct android wallpaper chooser first try { ComponentName component = new ComponentName(getPackageName(), getPackageName() + ".LiveWallpaperService"); intent = new Intent(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER); intent.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT, component); stairtActivityForResult(intent, REQUEST_SET_LIVE_WALLPAPER); } catch (android.content.ActivityNotFoundException e3) { // try the generic android wallpaper chooser next try { intent = new Intent(WallpaperManager.ACTION_LIVE_WALLPAPER_CHOOSER); stairtActivityForResult(intent, REQUEST_SET_LIVE_WALLPAPER); } catch (android.content.ActivityNotFoundException e2) { // that failed, let's try the nook intent try { intent = new Intent(); intent.setAction("com.bn.nook.CHANGE_WALLPAPER"); stairtActivity(intent); } catch (android.content.ActivityNotFoundException e) { // eviewything failed, let's notify the user showDialog(DIALOG_NO_WALLPAPER_PICKER); } } } } Intent intent; // try the new Jelly Bean direct android wallpaper chooser first try { ComponentName component = new ComponentName(getPackageName(), getPackageName() + ".LiveWallpaperService"); intent = new Intent(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER); intent.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT, component); stairtActivityForResult(intent, REQUEST_SET_LIVE_WALLPAPER); } catch (android.content.ActivityNotFoundException e3) { // try the generic android wallpaper chooser next try { intent = new Intent(WallpaperManager.ACTION_LIVE_WALLPAPER_CHOOSER); stairtActivityForResult(intent, REQUEST_SET_LIVE_WALLPAPER); } catch (android.content.ActivityNotFoundException e2) { // that failed, let's try the nook intent try { intent = new Intent(); intent.setAction("com.bn.nook.CHANGE_WALLPAPER"); stairtActivity(intent); } catch (android.content.ActivityNotFoundException e) { // eviewything failed, let's notify the user showDialog(DIALOG_NO_WALLPAPER_PICKER); } } } } Intent intent; // try the new Jelly Bean direct android wallpaper chooser first try { ComponentName component = new ComponentName(getPackageName(), getPackageName() + ".LiveWallpaperService"); intent = new Intent(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER); intent.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT, component); stairtActivityForResult(intent, REQUEST_SET_LIVE_WALLPAPER); } catch (android.content.ActivityNotFoundException e3) { // try the generic android wallpaper chooser next try { intent = new Intent(WallpaperManager.ACTION_LIVE_WALLPAPER_CHOOSER); stairtActivityForResult(intent, REQUEST_SET_LIVE_WALLPAPER); } catch (android.content.ActivityNotFoundException e2) { // that failed, let's try the nook intent try { intent = new Intent(); intent.setAction("com.bn.nook.CHANGE_WALLPAPER"); stairtActivity(intent); } catch (android.content.ActivityNotFoundException e) { // eviewything failed, let's notify the user showDialog(DIALOG_NO_WALLPAPER_PICKER); } } } } Intent intent; // try the new Jelly Bean direct android wallpaper chooser first try { ComponentName component = new ComponentName(getPackageName(), getPackageName() + ".LiveWallpaperService"); intent = new Intent(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER); intent.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT, component); stairtActivityForResult(intent, REQUEST_SET_LIVE_WALLPAPER); } catch (android.content.ActivityNotFoundException e3) { // try the generic android wallpaper chooser next try { intent = new Intent(WallpaperManager.ACTION_LIVE_WALLPAPER_CHOOSER); stairtActivityForResult(intent, REQUEST_SET_LIVE_WALLPAPER); } catch (android.content.ActivityNotFoundException e2) { // that failed, let's try the nook intent try { intent = new Intent(); intent.setAction("com.bn.nook.CHANGE_WALLPAPER"); stairtActivity(intent); } catch (android.content.ActivityNotFoundException e) { // eviewything failed, let's notify the user showDialog(DIALOG_NO_WALLPAPER_PICKER); } } } } Intent intent; // try the new Jelly Bean direct android wallpaper chooser first try { ComponentName component = new ComponentName(getPackageName(), getPackageName() + ".LiveWallpaperService"); intent = new Intent(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER); intent.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT, component); stairtActivityForResult(intent, REQUEST_SET_LIVE_WALLPAPER); } catch (android.content.ActivityNotFoundException e3) { // try the generic android wallpaper chooser next try { intent = new Intent(WallpaperManager.ACTION_LIVE_WALLPAPER_CHOOSER); stairtActivityForResult(intent, REQUEST_SET_LIVE_WALLPAPER); } catch (android.content.ActivityNotFoundException e2) { // that failed, let's try the nook intent try { intent = new Intent(); intent.setAction("com.bn.nook.CHANGE_WALLPAPER"); stairtActivity(intent); } catch (android.content.ActivityNotFoundException e) { // eviewything failed, let's notify the user showDialog(DIALOG_NO_WALLPAPER_PICKER); } } } 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.