Iniciar activity pelo widget

2 respostas
rafaeel
Iai gente, bem estou com um problema numa aplicação minha, acontece o seguinte eu fiz um widget que lê uns arquivos do assets e dá uma prévia ao usuario, quando ele clicka num botão ele inicia a activity por um intent e a activyty, a principal, chama o fragmento para mostrar o resto do texto, o problema vem agora. quando o usuario clicka pela primeira vez ele inicia tudo direitinho, e exibe o texto corretamente, mas quando ele clicka pela segunda vez, mesmo sendo um arquivo diferente ele envia o primeiro texto para a activity, ai lasca tudo.
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
			int[] appWidgetIds) {
			q++;
			new Timer().scheduleAtFixedRate(new MyTempo(context, appWidgetManager), 1, 5000);
	}
	private class MyTempo extends TimerTask{
		RemoteViews rv;
		AppWidgetManager apw;
		ComponentName widget;
		Context c;
		public MyTempo(Context context, AppWidgetManager awm){
			this.c = context;
			this.apw = awm.getInstance(c);
			this.rv = new RemoteViews(context.getPackageName(), R.layout.layout_widget);
			this.widget = new ComponentName(context, WidgetClasse.class.getName());
		}
		public void run() {
			AssetManager am = c.getApplicationContext().getAssets();
			byte[] buffer = null;
			Random ran = new Random();
			InputStream is;
			try {
				is = am.open("2m/fisica/" + new Integer(ran.nextInt(9) + 1).toString() + ".txt");
				int size = is.available();
				buffer = new byte[size];
				is.read(buffer);
				is.close();
			} catch (IOException e) {
				e.printStackTrace();
			} 
			String texto = new String(buffer);
			String[] a = texto.split(";");
			Intent i = new Intent(c.getApplicationContext(), MainActivity.class);
			i.putExtra("TITULO", a[2]);
			i.putExtra("TEXTO", a[3]);
			i.putExtra("LINK", a[4]);
			i.putExtra("MATERIA", a[5]);
			i.putExtra("SERIE", a[6]);
			
			PendingIntent p = PendingIntent.getActivity(c, 0, i, 0);
			
			rv.setOnClickPendingIntent(R.id.imageButton1, p);
			String text = i.getStringExtra("TITULO")+i.getStringExtra("TEXTO")+ i.getStringExtra("LINK")+ i.getStringExtra("MATERIA")+ i.getStringExtra("SERIE");
			Log.i("doideira", text);
			
			rv.setTextViewText(R.id.textViewWidget, a[1]);
			apw.updateAppWidget(widget, rv);
		}
	}
o classe do widget minha acvity, a parte que lê as strings do intent, e faz o resto, pode ter uma porrada de codigo morto mas desconsiderem
Intent i = getIntent();
			if (i.getStringExtra("TITULO")!= null){
				this.exibirO(i.getStringExtra("TITULO"), i.getStringExtra("TEXTO"), i.getStringExtra("LINK"), i.getStringExtra("MATERIA"), i.getStringExtra("SERIE"));
				String text = i.getStringExtra("TITULO")+i.getStringExtra("TEXTO")+ i.getStringExtra("LINK")+ i.getStringExtra("MATERIA")+ i.getStringExtra("SERIE");
				Log.i("doideiraActivity", text);
				i.removeExtra("TITULO");
				i.removeExtra("TEXTO");
				i.removeExtra("LINK");
				i.removeExtra("MATERIA");
				i.removeExtra("SERIE");
			}
o que eu quero é que ele limpe tudo, o widget le um arquivo diferente, mas no intent não vai!!! por favor ajudem

2 Respostas

fabriciov

Se não me engano se você gerar um request code único para toda vez que for chamar a activity soluciona o problema.

tipo isso…

PendingIntent p = PendingIntent.getActivity(c, new Randow().nextInt(999999999), i, 0);

rafaeel

valew vou tentar aqui. obrigado

Criado 28 de junho de 2013
Ultima resposta 29 de jun. de 2013
Respostas 2
Participantes 2