Autore Topic: lancio/visualizzazione app widget  (Letto 1243 volte)

Offline travis

  • Nuovo arrivato
  • *
  • Post: 29
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    emulatore
lancio/visualizzazione app widget
« il: 10 Settembre 2012, 20:28:08 CEST »
0
salve ragazzi, premetto che ho già letto il tutorial di zate (che a me non funziona), volevo sapere alcune info sugli app widget che evidentemente non mi sono chiare. Allora se ho un activity (che parte all'installazione del widget), un activity (widgets1Config) che configura il widget, ed un widget1 che rappresenta il widget vero e proprio, nel manifest come setto le activity. questo è il mio manifest:
Codice (XML): [Seleziona]
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.appwidget"
   android:versionCode="1"
   android:versionName="1.0" >

    <uses-sdk
       android:minSdkVersion="8"
       android:targetSdkVersion="15" />

    <application>
       <activity android:name=".NewActivity"
                 android:label="@string/app_name">
           <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
     </activity>
       
        <receiver android:name=".Widgets1">
            <intent-filter >
                        <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
            </intent-filter>
                    <meta-data android:name="android.appwidget.provider"
                              android:resource="@xml/widget_settings" />
          </receiver>
         
        <activity
           android:name=".Widgets1Config"
           android:label="@string/app_name"
           android:screenOrientation="portrait">
                  <intent-filter>
                            <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/>
                        </intent-filter>
                </activity>
    </application>

</manifest>

invece questo è il codice delle tre classi:

Codice (Java): [Seleziona]
public class NewActivity extends Activity{

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                // TODO Auto-generated method stub
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_new);      
        }
}


Codice (Java): [Seleziona]
public class Widgets1Config extends Activity implements OnClickListener{

        EditText info;
        AppWidgetManager awm;
        Context c;
        int awID;
       
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                // TODO Auto-generated method stub
                super.onCreate(savedInstanceState);
                //operazioni di routine
                setContentView(R.layout.widgets1config);
                Button b = (Button)findViewById(R.id.bConfig);
                b.setOnClickListener(this);
                c = Widgets1Config.this;
                info = (EditText)findViewById(R.id.etConfig);
                //si prendono info circa il widget che ha lanciato questa classe
                Intent i = getIntent();
                Bundle extras = i.getExtras();
                if(extras != null){
                        //reference
                        awID = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
                }else{
                        finish();
                }
                //si relaziona il widget al context
                awm = AppWidgetManager.getInstance(c);
        }

        @Override
        public void onClick(View arg0) {
                // TODO Auto-generated method stub
        String e = info.getText().toString();
        //cambia il testo del pulsante del widget
        RemoteViews rv = new RemoteViews(c.getPackageName(), R.layout.widget);
        rv.setTextViewText(R.id.bOpenActivity, e);
       //premendo il pulsante del widget si apre un'activity
        Intent in = new Intent(c, NewActivity.class);
        PendingIntent pi = PendingIntent.getActivity(c, 0, in, 0);
        rv.setOnClickPendingIntent(R.id.bOpenActivity, pi);
       //aggiorna
        awm.updateAppWidget(awID, rv);
        Intent result = new Intent();
        result.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, awID);
        setResult(RESULT_OK, result);
       
        finish();
        }

}

Codice (Java): [Seleziona]
public class Widgets1 extends AppWidgetProvider {


        @Override
        public void onUpdate(Context context, AppWidgetManager appWidgetManager,
                        int[] appWidgetIds) {
                // TODO Auto-generated method stub
                super.onUpdate(context, appWidgetManager, appWidgetIds);
                // numero casuale tra 1 e 1000
                Random r = new Random();
                int randomInt = r.nextInt(1000);
                // trasforma integer a string, in modo da poter essere usato in una
                // textview
                String rand = "" + randomInt;
                // assegna ad N il valore di appWidgetIds.length
                final int N = appWidgetIds.length;
                // Loop per ogni widget che appartiene a questo provider
                for (int i = 0; i < N; i++) {
                        int awID = appWidgetIds[i];
                        /* Prende il layout per il widget e setta un numero casuale tra 1 e
                        * 100 (trovato sopra) come testo della textview del widget
                        */

                        RemoteViews rv = new RemoteViews(context.getPackageName(),
                                        R.layout.widget);
                        rv.setTextViewText(R.id.tvRand, rand);
                        // Dice di aggiornarsi
                        appWidgetManager.updateAppWidget(awID, rv);
                }
        }

        @Override
        public void onDeleted(Context context, int[] appWidgetIds) {
                // TODO Auto-generated method stub
                super.onDeleted(context, appWidgetIds);
                // Toast quando viene eliminato
                Toast.makeText(context, "Perchè mi abbandoni?!", Toast.LENGTH_SHORT)
                                .show();
        }

}

questa app dovrebbe mostrare l'activity NewActivity all'apertura, e ad ogni click sul widget spostato sul desktop dovrebbe mostrare il layout del widget di configurazione, cosa che non avviene, infatti ogni volta che clicco sull'icona del mio widget mi apre sistematicamente il layout di NewActivity... qualcuno mi sa dare una dritta...?? xkè brancolo proprio nel buio. Grazie dell'aiuto e scusate il disturbo!

Offline supertommino

  • Utente junior
  • **
  • Post: 77
  • Respect: +12
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    supertommino
Re:lancio/visualizzazione app widget
« Risposta #1 il: 10 Settembre 2012, 22:47:59 CEST »
0
Codice (Java): [Seleziona]
public class Widgets1Config extends Activity implements OnClickListener{

        EditText info;
        AppWidgetManager awm;
        Context c;
        int awID;
       
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                // TODO Auto-generated method stub
                super.onCreate(savedInstanceState);
                //operazioni di routine
                setContentView(R.layout.widgets1config);
                Button b = (Button)findViewById(R.id.bConfig);
                b.setOnClickListener(this);
                c = Widgets1Config.this;
                info = (EditText)findViewById(R.id.etConfig);
                //si prendono info circa il widget che ha lanciato questa classe
                Intent i = getIntent();
                Bundle extras = i.getExtras();
                if(extras != null){
                        //reference
                        awID = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
                }else{
                        finish();
                }
                //si relaziona il widget al context
                awm = AppWidgetManager.getInstance(c);
        }

        @Override
        public void onClick(View arg0) {
                // TODO Auto-generated method stub
        String e = info.getText().toString();
        //cambia il testo del pulsante del widget
        RemoteViews rv = new RemoteViews(c.getPackageName(), R.layout.widget);
        rv.setTextViewText(R.id.bOpenActivity, e);
       //premendo il pulsante del widget si apre un'activity
        Intent in = new Intent(c, Widgets1Config.class);
        PendingIntent pi = PendingIntent.getActivity(c, 0, in, 0);
        rv.setOnClickPendingIntent(R.id.bOpenActivity, pi);
       //aggiorna
        awm.updateAppWidget(awID, rv);
        Intent result = new Intent();
        result.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, awID);
        setResult(RESULT_OK, result);
       
        finish();
        }

}

Anche se non capisco il senso
 :-)

Offline travis

  • Nuovo arrivato
  • *
  • Post: 29
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    emulatore
Re:lancio/visualizzazione app widget
« Risposta #2 il: 11 Settembre 2012, 09:03:05 CEST »
0
il codice è tutto nel tutorial degli app widget (l'ho copiato e incolllato con gli stessi nomi delle classi) ma ti ripeto a me nn funziona..

Offline supertommino

  • Utente junior
  • **
  • Post: 77
  • Respect: +12
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    supertommino
Re:lancio/visualizzazione app widget
« Risposta #3 il: 11 Settembre 2012, 12:29:03 CEST »
0
Ma cosa non va?
Non appare il widget nella lista?
Non si inserisce?
ti da qualche errore?
Spiega un po cosa non va insomma.. seno come posso capire
 :-)

Offline travis

  • Nuovo arrivato
  • *
  • Post: 29
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    emulatore
Re:lancio/visualizzazione app widget
« Risposta #4 il: 12 Settembre 2012, 08:55:14 CEST »
0
Ma cosa non va?

L'applicazione parte, xkè all'avvio mi lancia l'activity newActivity mostrando il messaggio di benvenuto.
Non appare il widget nella lista?
Non si inserisce?

il widget dalla lista appare e lo riesco anche a portare sullo schermo.
ti da qualche errore?

No. errori non me ne da. E' un problema di logica credo. Una volta trascinato sullo schermo, quando ci clicco sopra mi apre sempre di nuovo l'activity iniziale NewActivity mentre nel tutorial diceva che doveva aprire l'activity Widget1Config (in quanto nel manifest è impostato come configuratore questa classe). Dopo sempre secondo il tutorial, avendo impostato le configurazioni, al click dovrebbe aprire widget1 che dovrebbe visualizzare a schermo il numero random scelto.
Ma vi ripeto il mio app widget non fa nulla di tutto questo.

Lo metto sullo schermo ed ogni volta che ci clicco sopra mi apre newActivity..xkè???
ho sbagliato qualcosa??
dove??
nel Manifest?
nei file singoli xml?
nel codice?

ripeto zero errori sintattici, quì c'è un problema di logica, e ripeto ho copiato tutto dal tutorial:
http://www.anddev.it/index.php/topic,4640.0.html

Offline supertommino

  • Utente junior
  • **
  • Post: 77
  • Respect: +12
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    supertommino
Re:lancio/visualizzazione app widget
« Risposta #5 il: 12 Settembre 2012, 12:57:03 CEST »
0
Quando porti il widget sul desktop si apre l'activity di configurazione..
Ma se clicchi sul tasto si apre newActivity ed è giusto così
 :-)
Comunque in fondo al tutorial ci sono i sorgenti che puoi scaricare direttamente se vuoi confrontare meglio
Link: [Medio]App Widgets - Android Developers Italia
I tutorial secondo me è un po incasinato.. Ma comunque sempre meglio di niente
 :-)