Autore Topic: Usare bottoni in un widget  (Letto 2448 volte)

Offline djdedo

  • Utente normale
  • ***
  • Post: 209
  • Respect: +15
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
Usare bottoni in un widget
« il: 18 Novembre 2011, 15:20:00 CET »
0
Salve ragazzi, premetto che è il primo widget che sto provando a sviluppare e non sto riuscendo a venirne a capo. Sicuramente sto cercando male oppure è qualcosa che mi sta sfuggendo ma in pratica non riesco ad associare ai bottoni che ho inserito un'azione.
In pratica ho sviluppato un'app per una webradio. Questa app non fa altro che lanciare un service che legge poi lo streaming. Avevo pensato fosse carino avere anche un widget sulla homescreen che mi facesse controllare questo service ma non sto riuscendo a capire come funzionano.
Chi mi può dare una mano?  :-)

Zate

  • Visitatore
Re:Usare bottoni in un widget
« Risposta #1 il: 18 Novembre 2011, 15:24:00 CET »
0
[Medio]App Widgets - Android Developers Italia

Prova a vedere questo tutorial ;)

Offline djdedo

  • Utente normale
  • ***
  • Post: 209
  • Respect: +15
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
Re:Usare bottoni in un widget
« Risposta #2 il: 21 Novembre 2011, 11:26:30 CET »
0
Ciao ti ringrazio per la risposta, non mi sono fatto sentire perchè al momento sto lavorando su un altro progetto. Ho solo dato un rapido sguardo, dovrò vedermelo con più calma ma mi è parso di capire che dovrei comunque crearmi una activity da lanciare con quel tasto? Oppure ho travisato completamente? :D

Zate

  • Visitatore
Re:Usare bottoni in un widget
« Risposta #3 il: 21 Novembre 2011, 15:24:21 CET »
0
Ho visto che esiste un setOnClickPendingIntent.
RemoteViews | Android Developers, android.app.PendingIntent)
Questo si può usare nella classe del widget, altrimenti crei un'altra classe come ho fatto nel tutorial ;)

Offline djdedo

  • Utente normale
  • ***
  • Post: 209
  • Respect: +15
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
Re:Usare bottoni in un widget
« Risposta #4 il: 21 Novembre 2011, 19:27:23 CET »
0
Ciao, ti ringrazio per la pazienza prima di tutto :D
Allora forse sono duro di comprendonio io ma non sto riuscendo ad adattare quello che leggo alla mia situazione. In sostanza (e spero questo non faccia cambiare di molto lo scenario) io dovrei controllare un service tramite questo widget, in particolare tramite un tasto "play" dovrei farlo partire e tramite un tasto "stop" dovrei fermarlo. Ma mi sta risultando ostico farlo  o_O

Zate

  • Visitatore
Re:Usare bottoni in un widget
« Risposta #5 il: 21 Novembre 2011, 22:16:33 CET »
0
Tranquillo, cambia poco niente (penso, dal momento che di service ripeto che non so quasi niente).
Prima di tutto urge una correzione, ho messo queste tre righe di codice
Codice (Java): [Seleziona]
Intent in = new Intent(c, NewActivity.class);
PendingIntent pi = PendingIntent.getActivity(c, 0, in, 0);
rv.setOnClickPendingIntent(R.id.bOpenActivity, pi);
nell'activity in modo da rendere il pulsante funzionante da subito, senza dover aspettare 30 minuti come dovrei fare se lo mettessi in onUpdate().
Esistono comunque modi per aggiornare il widget più frequentemente attraverso dei service (su Google trovi di sicuro).

Comunque, penso che nel tuo caso sia sufficiente fare qualcosa tipo:
Codice (Java): [Seleziona]
Intent in = new Intent(c, MioService.class);
PendingIntent pi = PendingIntent.getService(c, 0, in, 0);
rv.setOnClickPendingIntent(R.id.bOpenActivity, pi);

Purtroppo non ti so dire come finire il service.

P.S. Non ho capito se il tuo problema è a livello grafico oppure di meccanismo.

Offline djdedo

  • Utente normale
  • ***
  • Post: 209
  • Respect: +15
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
Re:Usare bottoni in un widget
« Risposta #6 il: 06 Dicembre 2011, 10:19:51 CET »
0
Ciao perdona il ritardo ma finalmente posso dedicarmi a questo problema. Allora per ricapitolare io cercavo di far partire un service (che legge uno stream audio) tramite un button su un widget.
Il mio widget è molto semplice al momento, è un solo bottone :D
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="vertical" >


    <Button
        android:id="@+id/widgetPlayButton"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="Play">
    </Button>


</LinearLayout>


Mentre la classe che estende AppWidgetProvider è questa
Codice (Java): [Seleziona]
package it.dedo.prendiillargo.widget;


import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.Toast;


public class PrendiIlLargoWidget extends AppWidgetProvider {


        @Override
        public void onUpdate(Context context, AppWidgetManager appWidgetManager,
                        int[] appWidgetIds) {
                Log.d("Widget prendi il largo", "Sto facendo qualcosa forse");
        }
       
        @Override
    public void onReceive(Context context, Intent intent) {
        AppWidgetManager mgr = AppWidgetManager.getInstance(context);
        int appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
            AppWidgetManager.INVALID_APPWIDGET_ID);
        Toast.makeText(context, "Touched view", Toast.LENGTH_SHORT).show();
        super.onReceive(context, intent);
    }
}
Ora io qui volevo vedere se toccando quel tasto succedesse qualcosa ma non è così, quindi ho proprio problemi di meccanismo, i problemi grafici verranno dopo :D

Offline djdedo

  • Utente normale
  • ***
  • Post: 209
  • Respect: +15
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
Re:Usare bottoni in un widget
« Risposta #7 il: 06 Dicembre 2011, 13:00:21 CET »
0
Ciao sto facendo alcune prove e finalmente son riuscito a far aprire una activity alla pressione del bottone almeno.
Purtroppo la stessa cosa non la riesco a fare per far partire un service.
Questo è il nuovo codice
Codice (Java): [Seleziona]
package it.dedo.prendiillargo.widget;


import it.dedo.prendiillargo.PrendiIlLargoActivity;
import it.dedo.prendiillargo.R;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.RemoteViews;


public class PrendiIlLargoWidget extends AppWidgetProvider {


        @Override
        public void onUpdate(Context context, AppWidgetManager appWidgetManager,
                        int[] appWidgetIds) {
                Log.d("Widget prendi il largo", "Sto facendo qualcosa forse");
               
                for (int i = 0; i < appWidgetIds.length; i++) {
                        Intent intent = new Intent(context, PrendiIlLargoActivity.class);
                        PendingIntent pi = PendingIntent.getActivity(context, 0, intent, 0);
                       
                        RemoteViews view = new RemoteViews(context.getPackageName(), R.layout.widget);
                        view.setOnClickPendingIntent(R.id.widgetPlayButton, pi);
                       
                        appWidgetManager.updateAppWidget(appWidgetIds[i], view);
                }
        }
}

Offline djdedo

  • Utente normale
  • ***
  • Post: 209
  • Respect: +15
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
Re:Usare bottoni in un widget
« Risposta #8 il: 06 Dicembre 2011, 18:01:05 CET »
0
Aggiorno man mano che riesco a fare cose nuove  :D
Sono riuscito a far partire un service, solo che ora non riesco a farlo stoppare. Se ad esempio metto 2 tasti nel widget (play e stop) non riesco a dirgli di fare ad uno lo startservice e all'altro lo stop.
Questo è il nuovo codice del metodo onUpdate
Codice (Java): [Seleziona]
@Override
        public void onUpdate(Context context, AppWidgetManager appWidgetManager,
                        int[] appWidgetIds) {
                Log.d("Widget prendi il largo", "Sto facendo qualcosa forse");
               
                for (int i = 0; i < appWidgetIds.length; i++) {
                        RemoteViews view = new RemoteViews(context.getPackageName(), R.layout.widget);
                       
                        Intent intentPlay = new Intent(context, MediaPlayerBackGround.class);
                        PendingIntent piPlay = PendingIntent.getService(context, 0, intentPlay, 0);
                        view.setOnClickPendingIntent(R.id.widgetPlayButton, piPlay);
                       
                        appWidgetManager.updateAppWidget(appWidgetIds[i], view);
                }
        }

Zate

  • Visitatore
Re:Usare bottoni in un widget
« Risposta #9 il: 06 Dicembre 2011, 18:26:01 CET »
0
Adesso ci vorrebbe qualcuno più esperto di me nei service ;)
Ma non potrebbe funzionare qualcosa tipo:
Codice (Java): [Seleziona]
stopService(new Intent(context,MioService.class));oppure
Codice (Java): [Seleziona]
stopService(new Intent("it.dedo.prendiillargo.MioService.class"));?
« Ultima modifica: 06 Dicembre 2011, 18:34:37 CET da Zate »

Offline djdedo

  • Utente normale
  • ***
  • Post: 209
  • Respect: +15
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
Re:Usare bottoni in un widget
« Risposta #10 il: 06 Dicembre 2011, 22:55:24 CET »
0
Non saprei anche perchè il metodo stopService forse non è disponibile nei widget. Oltretutto non saprei associare quell'azione a quel button specifico

Offline supertommino

  • Utente junior
  • **
  • Post: 77
  • Respect: +12
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    supertommino
Re:Usare bottoni in un widget
« Risposta #11 il: 09 Gennaio 2012, 14:10:25 CET »
0
qualcuno è riuscito a terminare il servizio?

Offline djdedo

  • Utente normale
  • ***
  • Post: 209
  • Respect: +15
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
Re:Usare bottoni in un widget
« Risposta #12 il: 09 Gennaio 2012, 14:42:25 CET »
0
No anche perchè per il momento ho lasciato perdere quel progetto

Offline supertommino

  • Utente junior
  • **
  • Post: 77
  • Respect: +12
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    supertommino
Re:Usare bottoni in un widget
« Risposta #13 il: 09 Gennaio 2012, 18:48:20 CET »
0
io ci sono riuscito passando i dati intent
ma non riesco a cambiare il pulsante(imagebutton) l'immagine al click

Offline TheTodd

  • Utente junior
  • **
  • Post: 58
  • Respect: +3
    • Mostra profilo
  • Dispositivo Android:
    samsung gs2
  • Play Store ID:
    sdmdev
  • Sistema operativo:
    window xp
Re:Usare bottoni in un widget
« Risposta #14 il: 18 Luglio 2012, 16:47:58 CEST »
0
qualcuno riesce ad avere 2 bottoni sullo stesso widget che facciano due cose differenti alla pressioni? grazie anticipatamente