SORU
1 Mayıs 2010, CUMARTESİ


Android tıklanabilir widget

Geliştirici belgelerine burada bana başarısız olmamıştı. Ben oluşturmak bir statik widget düşünmeden, ben bile yaratmak gibi bir widget, analog saat widget will update kendisi, ancak, ben değil, hayat beni anlamaya oluşturma widget bu tepki ne zaman bir kullanıcı tıklama. Burada geliştirici belgelerine widget bir etkinlik içermelidir ne için (tek ipucu, yalnızca statik bir widget oluşturur API demos, varlık) veren iyi bir kod örneği:

public class ExampleAppWidgetProvider extends AppWidgetProvider {
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] 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  ) {
            int appWidgetId = appWidgetIds[i];

            // Create an Intent to launch ExampleActivity
            Intent intent = new Intent(context, ExampleActivity.class);
            PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);

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

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

kimden: The Android Developer Documentation's Widget Page

Yani, göründüğü gibi bekleyen niyet arayınca widget tıklandığında, hangi kapalı tabanlı bir niyet (ben oldukça emin değilim ne fark arasında bir niyet ve bekleyen bir niyet ve niyet için ExampleActivity sınıf. Yaptım benim örnek etkinlik sınıf basit bir aktivite oluşturan, oluşturma * nesne, ve start (olmaz hiç bırakma nesne, ki sonunda kaza, işte o kod:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    MediaPlayer mp = MediaPlayer.create(getApplicationContext(), R.raw.sound);
    mp.start();
}

Ancak, ne zaman ekledim widget ana ekran ve tıkladım, bir şey oynadı, aslında, hiçbir şey oynarken kurdum güncelleme zamanlayıcı için sadece birkaç yüz milisaniye (appwidget sağlayıcı xml dosyası). Ayrıca, puan kırmak kurdum ve sadece hiç aktivite ulaşan oldu, ama sonu hiç tetikledi alayım ayar noktaları olduğunu öğrendim. (Ben hala neden olduğunu çözemedim), ancak, logcat gösterir gibiydi etkinliği sınıf dosyasını çalıştırmak ediliyordu.

Tıklatın verdi appwidget almak için yapabileceğim bir şey var mı? Bu onClickPendingİntent() yöntemi yöntemin özelliği bir tür buldum en yakın.

Çok teşekkür ederim.

CEVAP
1 Mayıs 2010, CUMARTESİ


İlk olarak, bir sabit, statik bir değişken Ekle.

public static String YOUR_AWESOME_ACTION = "YourAwesomeAction";

Bekleyen niyet niyet eklemeden önce niyet eylemi eklemek gerekir:

Intent intent = new Intent(context, widget.class);
intent.setAction(YOUR_AWESOME_ACTION);

(Burada widget.class senin AppWidgetProvider, mevcut sınıf) sınıf

Daha sonra getBroadcast ile bir Pendingİntent oluşturmanız gerekir

PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);

Sizin widget tıklanabilir görüntülemek için onClickPendingİntent ayarlayın

remoteView.setOnClickPendingIntent(R.id.widgetFrameLayout, pendingIntent);

Sonra aynı sınıfta: onReceive yöntemini geçersiz kılar

@Override
public void onReceive(Context context, Intent intent) {
 super.onReceive(context, intent);

Ve sonra niyet onReceive metodu içinde eylem için geri döndü sorgulayarak düğme presler yanıt:

if (intent.getAction().equals(YOUR_AWESOME_ACTION)) {
   //do some really cool stuff here
}

Hepsi bu olsa gerek!

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Amir Parmar

    Amir Parmar

    25 Kasım 2010
  • Matt Steffanina

    Matt Steffan

    1 EYLÜL 2011
  • TheJoeycool2010

    TheJoeycool2

    12 Temmuz 2010