Pergunta

Meu aplicativo Android Transdroid oferece vários widgets de tela inicial. Todo aplicativo appwidget possui 2 'botões' (ImageButton), um inicia o aplicativo e um inicia algumas atividades que atualizam o conteúdo do AppWidget. Bem simples. Aqui é uma captura de tela. O código do widget está no meu site do Google Code, mas o mais importante:

RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.appwidget_15);
views.setOnClickPendingIntent(R.id.widget_action, PendingIntent.getActivity(context, 0, new Intent(context, Transdroid.class), 0));
appWidgetManager.updateAppWidget(id, views);

O problema é: o OnUpdate do widget não é chamado após a reinicialização o processo doméstico e, portanto, os intenções pendentes usadas para anexar a funcionalidade aos botões são perdidos.

É bastante fácil reproduzir.

  1. Inicie um emulador
  2. Adicione um widget (que usa um interior pendente para, digamos, iniciar uma atividade)
  3. Clique no botão para ver que realmente funciona
  4. Force Kill The Home Proces ('Adb -e Shell Kill 96', onde 96 é o pid de Android.process.acore)
  5. O botão do widget não funciona mais.

Mais preciso: não é reiniciado e, portanto, nenhum OnUpdate é chamado quando o processo doméstico Android.process.acore é reiniciado. Por sua vez, nenhuma intenção é anexada.

Alguém experimentou o mesmo problema e sabe como contornar esse problema?

Foi útil?

Solução

Acabei de testar alguns dos meus próprios aplicativos, e seus eventos de cliques funcionam bem depois de matar a Bedeneira. Aqui está meu código relevante:

    final RemoteViews views = new RemoteViews(context.getPackageName(), layoutId);
    views.setOnClickPendingIntent(R.id.widget_view, PendingIntent.getActivity(
            context, 
            0, 
            new Intent(context, MyActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK), 
            PendingIntent.FLAG_UPDATE_CURRENT));

A principal diferença que posso ver são as bandeiras relacionadas à intenção; Eu diria que eles definitivamente valem a pena tentar. [O layoutId O parâmetro no meu código está definido mais; Esse mesmo código é usado para vários widgets com layouts diferentes].

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top