CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: complicazio con ben 2 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: 9mm con ben 11 Thanks ricevuti negli ultimi sette giorni
Utente del mese: 9mm con ben 34 Thanks ricevuti nell'ultimo mese

Visualizzazione dei risultati da 1 a 9 su 9
Discussione:

Problema Widget

Se questa discussione ti è stata utile, ti preghiamo di lasciare un messaggio di feedback in modo che possa essere preziosa in futuro anche per altri utenti come te!
  1. #1
    Senior Droid L'avatar di Cecco


    Registrato dal
    May 2009
    Messaggi
    478
    Smartphone
    Samsung Galaxy Nexus

    Ringraziamenti
    6
    Ringraziato 77 volte in 43 Posts
    Predefinito

    Problema Widget

    Salve ragazzi,
    ho un problema con il setOnClickPendingIntent() del widget.

    Praticamente accade che, dopo la creazione del widget, quando ci vado a cliccare sopra NON SUCCEDE NULLA. Neanche una riga sul logcat...assolutamente nulla...

    Praticamente è come se non ci avessi mai cliccato....Poi la cosa strana è che, quando reinstallo l'applicazione, se ci riclicco su FUNZIONA!!!

    Qualcuno sa dare una spiegazione a questo comportamento strano?
    GynLemon....m'hai fatto venì sete

  2.  
  3. #2
    Senior Droid L'avatar di Cecco


    Registrato dal
    May 2009
    Messaggi
    478
    Smartphone
    Samsung Galaxy Nexus

    Ringraziamenti
    6
    Ringraziato 77 volte in 43 Posts
    Predefinito

    Ho notato questo inoltre:

    codice:
    03-19 11:26:40.901: WARN/IInputConnectionWrapper(386): showStatusIcon on inactive InputConnection
    Ogni volta che aggiungo un widget.
    Mentre TUTTI GLI ALTRI WIDGET tirano fuori questo:

    codice:
    03-19 11:27:02.762: WARN/InputManagerService(57): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@43d26568
    E' una cosa normale?
    GynLemon....m'hai fatto venì sete

  4. #3
    Administrator L'avatar di Andrea


    Registrato dal
    Nov 2008
    Messaggi
    3,368
    Smartphone
    Nexus S, myTouch Slide 4g

    Ringraziamenti
    143
    Ringraziato 880 volte in 323 Posts
    Predefinito

    Ci passi un pochino di codice dove setti il pending intent ? Giusto per capire se e dove sbagli

    Twitter @veke87

  5. #4
    Senior Droid L'avatar di Cecco


    Registrato dal
    May 2009
    Messaggi
    478
    Smartphone
    Samsung Galaxy Nexus

    Ringraziamenti
    6
    Ringraziato 77 volte in 43 Posts
    Predefinito

    OK, grazie per la disponibilità:

    Questo è il mio widget_layout:
    codice:
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    	android:layout_height="72dip" android:layout_width="72dip"
    	android:background="@drawable/soswidg" android:id="@+id/widgLinearLayout" android:clickable="true" android:focusable="true">
    	<TextView android:text="Number"
    		android:layout_height="wrap_content" android:gravity="center"
    		android:layout_gravity="center" android:layout_marginBottom="2px"
    		android:textColor="#000000" android:typeface="serif" android:id="@+id/numberTextView" android:focusable="false" android:focusableInTouchMode="false" android:layout_width="fill_parent">
    	</TextView>
    </LinearLayout>
    Questo è il mio onUpdate:
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds){

    super.onUpdate(context, appWidgetManager, appWidgetIds);

    final int N = appWidgetIds.length;

    // Perform this loop procedure for each App Widget that belongs to this provider
    for (int i = 0; i < N; i++) {

    // For each widgetId
    int appWidgetId = appWidgetIds[i];

    // Create an Intent to launch listener
    Intent msg = new Intent(SOS_INTENT);
    msg.putExtra("widgetID", String.valueOf(appWidgetId));
    PendingIntent intent = PendingIntent.getBroadcast(context, 1, msg, PendingIntent.FLAG_UPDATE_CURRENT);

    //@ BOOT: Retrieve name of widget
    SettingManager setManager = new SettingManager(context);
    String numberText = setManager.retrieveNumberText(appWidgetId);

    // Get the layout for the App Widget and attach an on-click listener
    // to the button
    RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout);

    views.setOnClickPendingIntent(R.id.widgLinearLayou t, intent);
    views.setViewVisibility(R.id.widgLinearLayout, View.VISIBLE);

    views.setTextViewText(R.id.numberTextView, numberText);
    views.setViewVisibility(R.id.numberTextView, View.VISIBLE);
    //views.setOnClickPendingIntent(R.id.numberTextView, intent);

    // Tell the AppWidgetManager to perform an update on the current App Widget
    appWidgetManager.updateAppWidget(appWidgetId, views);

    }
    }


    Serve altro?
    Ultima modifica di Andrea; 20-03-10 alle 11:31
    GynLemon....m'hai fatto venì sete

  6. #5
    Senior Droid L'avatar di Cecco


    Registrato dal
    May 2009
    Messaggi
    478
    Smartphone
    Samsung Galaxy Nexus

    Ringraziamenti
    6
    Ringraziato 77 volte in 43 Posts
    Predefinito

    Ho scoperto che eliminando questa riga dal codice delle preference:

    appWidgetManager.updateAppWidget(appWidgetId, views);

    il click sul widget funziona........
    Tuttavia, questa riga non posso eliminarla dal codice....indi per cui, come risolvo?
    GynLemon....m'hai fatto venì sete

  7. #6
    Administrator L'avatar di Andrea


    Registrato dal
    Nov 2008
    Messaggi
    3,368
    Smartphone
    Nexus S, myTouch Slide 4g

    Ringraziamenti
    143
    Ringraziato 880 volte in 323 Posts
    Predefinito

    Il pending intent lo stai mettendo sull'intero layout. Prova a metterlo sulla textview e farla un pelo più grande per capire se funziona.

    Inoltre SOS_INTENT Cos'è ?

    Perchè in questo modo stai lanciando un broadcast con quello che c'è dentro SOS INTENT ... Sarebbe utile per me sapere cosa si trova all'interno di quella Costante.

    Fammi sapere.

    Twitter @veke87

  8. #7
    Senior Droid L'avatar di Cecco


    Registrato dal
    May 2009
    Messaggi
    478
    Smartphone
    Samsung Galaxy Nexus

    Ringraziamenti
    6
    Ringraziato 77 volte in 43 Posts
    Predefinito

    Grazie per i consigli, ti dico cosa ho fatto nel frattempo.

    Ho inserito una ImageButton grossa come tutto il layout

    Inoltre SOS_INTENT. Cos'è?
    SOS_INTENT è un mio messaggio inviato in broadcast per far attivare il click, infatti ho un'altra classe:

    codice:
    @Override
        public void onReceive(Context ctx, Intent intent) {
            
    		// Get action from intent (e.g. SEND_SOS)
    		String action = intent.getAction();
    		
    		if (action.equals(WidgetReceiver.SOS_INTENT)) {
                
            	Log.i(TAG, "Click on widget");
                    ....................... //logica dell'applicazione
    Sostanzialmente SOS_INTENT è questa:

    codice:
    public static final String SOS_INTENT = "SEND_SOS";
    Il bello è che, riavviando l'emulatore, tutto funziona perfettamente. Quello che non va è l'updateAppWidget all'ìnterno della mia ConfigureActivity. Mi chiedo, non è che l'updateAppWidget va fatto all'interno della classe che estende AppWidgetProvider?
    GynLemon....m'hai fatto venì sete

  9. #8
    Senior Droid L'avatar di Cecco


    Registrato dal
    May 2009
    Messaggi
    478
    Smartphone
    Samsung Galaxy Nexus

    Ringraziamenti
    6
    Ringraziato 77 volte in 43 Posts
    Predefinito

    Dunque, ho risolto il problema, ma ne ho un altro ancora più grave.

    Io ho questa situazione. Assegno un numero di telefono ad ogni widgetID, esempio:

    WidgetID23 = 123;
    WidgetID24 = 456;
    WidgetID25 = 789;
    etc...

    ovviamente per n widget.
    Il mio problema è che nell'update, per ogni widget, io istanzio un PendingIntent per associargli il click settando tutto in questo modo:

    codice:
    Intent msg = new Intent(SOS_INTENT);
    		msg.putExtra("widgetID", String.valueOf(appWidgetId));
    		PendingIntent intent = PendingIntent.getBroadcast(context, -1, msg, PendingIntent.FLAG_UPDATE_CURRENT);
    
            RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
            views.setTextViewText(R.id.numberTextView, text);
    		views.setOnClickPendingIntent(R.id.widgLinearLayout, intent);
            appWidgetManager.updateAppWidget(appWidgetId, views);
    Se metto un solo widget funziona (cliccando su WidgetID23 parte la chiamata verso il numero 123), se ne metto un altro e ci clicco sopra parte la chiamata 456.
    RICLICCANDO SUL WidgetID23 parte 456........PERCHE'?
    GynLemon....m'hai fatto venì sete

  10. #9
    Senior Droid L'avatar di Cecco


    Registrato dal
    May 2009
    Messaggi
    478
    Smartphone
    Samsung Galaxy Nexus

    Ringraziamenti
    6
    Ringraziato 77 volte in 43 Posts
    Predefinito

    Ho risolto tutto finalmente. C'è da dire che la documentazione di Android non aiuta per nulla in questi casi e che i PendingIntent hanno un comportamento un pò strano. Appena posso posto la soluzione nella sezione Snippet.

    @Andrea: Grazie comunque per la tua disponibilità
    GynLemon....m'hai fatto venì sete

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire risposte
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Torna su
Privacy Policy