2013-02-23 28 views
37

Zaten kişi isim ve telefon numarası ile tarih depolayan bir android uygulamasını yaptık.nasıl tek uygulamada uygulama widget'ı ile android uygulaması oluşturmak için

Bu uygulamanın bugünün (tarih, kişi adı ve telefon numarası) tuşunu kullanarak göstermesi için bir tane widget'ı geliştirmem gerekiyor.

Koşullar: uygulama ve widget'la

  1. Tek bir uygulama. Ben widget'ta bir butona tıkladığınızda
  2. , benim uygulamasını başlatacaktır.
  3. Araç verileri her zaman uygulamam ile senkronize olmalıdır - bugün gün
  4. Nasıl bu widget'ı tasarlayabilirsiniz (kişi 5 ve uygulama 5 kişi daha sonra Widget ekran 10 kişi veri ekleme) ne zaman? Herhangi bir yönerge? yatay ScrollView kullanmalıyım.

Basit bir pencere aracı demosu yaptım ancak bunu uygulamamla nasıl eşitleyeceğimi bilmiyorum.

deneyimlerini paylaşmak ve benim Widget ve uygulama hakkında biraz fikir verin.

+0

Birinci ve ikinci gereksinimi çözmek için tüm günü buluyorum ve bitti. – Harshid

+4

http://www.vogella.com/articles/AndroidWidgets/article.html bu bağlantıya bakın – Roadies

cevap

8

Birkaç gün buluyorum, bir şekilde çözüm buldum. Bu yüzden fikrimi paylaşıyorum.

Bu site

benim için çok faydalı olmuştur.

http://kasperholtze.com/android/how-to-make-a-simple-android-widget/

bazı değişiklikler yaptım ve işimi yaptım.

Gereği çözeltisi:

1. Alıcısı yapın ve bunun gibi tezahür izni içine koydu. Benim tarafında

<receiver 
     android:name=".WatchWidget" 
     android:label="WatchWidget" > 
     <intent-filter> 
      <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
     </intent-filter> 
     <meta-data 
      android:name="android.appwidget.provider" 
      android:resource="@xml/watch_widget_provider" /> 
    </receiver> 

2. onUpdate() yılında TextView'un kimliği kullanarak yapabilirsiniz üst TextView'un tıklama gerekir.

remoteViews = new RemoteViews(context.getPackageName(),R.layout.widget_lay); 

    Intent intent = new Intent(context, TestActivity.class); 
    intent.setAction("callActivity"); 
    PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); 
    remoteViews.setOnClickPendingIntent(R.id.widget_textview, pendingIntent); 
    appWidgetManager.updateAppWidget(new ComponentName(context,WatchWidget.class), remoteViews); 

3. ben veritabanını arayıp kayıt alıp göstermek istiyorum. Şimdi güncelleme hakkında ne var?

yüzden kullandık zamanlayıcı sınıfı ve çünkü Widget (olabilir) 30 dakika güncellemek her zaman üzerinde her 1000sec çalıştırın.

@Override 
public void onUpdate(final Context context, final AppWidgetManager appWidgetManager, final int[] appWidgetIds) 
{ 

    this.appWidgetManager = appWidgetManager; 
    try { 
     Timer timer = new Timer(); 
     timer.scheduleAtFixedRate(new MyTime(context, appWidgetManager,appWidgetIds), 1, 1000); 

    } catch (Exception e) { 
     System.out.println("Exception:"); 
    } 
    updateSwitch1(context, appWidgetManager, appWidgetIds[0]); 

} 

herhangi birine sahip sorgular, daha sonra bana bu cevabı kullanışlı hale getirmek için tam destek verdi herkese bir yorum ve teşekkür koyarsanız.

+0

hai i bu bağlantı için bir soru gönderin lütfen bana yardım edin http://stackoverflow.com/questions/18376263/automatically-update-widget -in-the-home-screen-ne-i-make-modifikasyon-in-my-ap – Satheesh

+0

Öğretici bağlantı 500 İç Sunucu Hatası verir. – Enoobong

+1

link çalışmıyor – baxx

36

Widget'ı oluşturup yapılandırmak

Eğer android.appwidget.action.APPWIDGET_UPDATE eylem için bir niyet filtreli bir BroadcastReceiver oluşturmak bir widget kaydetmek için.

<receiver 
     android:icon="@drawable/icon" 
     android:label="Example Widget" 
     android:name="MyWidgetProvider" > 
     <intent-filter > 
      <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
     </intent-filter> 

     <meta-data 
      android:name="android.appwidget.provider" 
      android:resource="@xml/widget_info" /> 
</receiver> 

Ayrıca android aracılığıyla widget için meta verileri belirtin:. Name = "android.appwidget.provider özelliğini bu meta-veri tarafından yönlendirilen yapılandırma dosyasını yapılandırma ayarlarını içerir Örneğin, güncelleme arabirimi, küçük aracın boyutu ve ilk düzenini içeriyorsa

/res/drawable dizininde myshape.xml dosyası oluşturun.Bu dosya, widget'ınızda kullandığımız arka planı tanımlayacaktır.

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
      android:shape="rectangle" > 

    <stroke 
     android:width="2dp" 
     android:color="#FFFFFFFF" /> 

    <gradient 
     android:angle="225" 
     android:endColor="#DD2ECCFA" 
     android:startColor="#DD000000" /> 

    <corners 
     android:bottomLeftRadius="7dp" 
     android:bottomRightRadius="7dp" 
     android:topLeftRadius="7dp" 
     android:topRightRadius="7dp" /> 

</shape> 

Res/layout klasörünün altında aşağıdaki widget_layout.xml dosyasını tanımlayın. Sınıfı hazırlayın şimdi.

public class MyWidgetProvider extends AppWidgetProvider { 

    private static final String ACTION_CLICK = "ACTION_CLICK"; 

    @Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 

    // Get all ids 
    ComponentName thisWidget = new ComponentName(context, 
     MyWidgetProvider.class); 
    int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget); 
    for (int widgetId : allWidgetIds) { 
     // Create some random data 
     int number = (new Random().nextInt(100)); 

     RemoteViews remoteViews = new RemoteViews(context.getPackageName(), 
      R.layout.widget_layout); 
     Log.w("WidgetExample", String.valueOf(number)); 
     // Set the text 
     remoteViews.setTextViewText(R.id.update, String.valueOf(number)); 

     // Register an onClickListener 
     Intent intent = new Intent(context, MyWidgetProvider.class); 

     intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE); 
     intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds); 

     PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 
      0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
     remoteViews.setOnClickPendingIntent(R.id.update, pendingIntent); 
     appWidgetManager.updateAppWidget(widgetId, remoteViews); 
    } 
    } 
+0

Bu benim için ne kadar yararlı olduğunu Teşekkürler @Maya mAku – Harshid

+6

abtout xml/widget_info dosyasını unuttuysanız, gibi bir şey: ' ' – Choletski

İlgili konular