2011-03-20 4 views
0

5 ~ 10 초마다 새로 고치는 현재 날짜를 표시하는 위젯을 만들었습니다. 나중에 기간이 길어집니다. onUpdate 메소드에 알람을 작성하여 서비스를 시작하면 위젯이 날짜로 업데이트됩니다. 위젯을 호출 할 때 아무 일도 일어나지 않습니다. 알람 또는 서비스에 문제가 있는지 여부를 모릅니다. 아래 코드를 붙여 넣습니다.Android : 알람 또는 서비스가 위젯을 업데이트하기 위해 호출되지 않음

<?xml version="1.0" encoding="utf-8"?> 
    <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" 
    android:minWidth="146dip" 
    android:minHeight="72dip" 
    android:updatePeriodMillis="1000" 
    android:initialLayout="@layout/main" 
    />  

안드로이드 매니페스트 XML

main.xml에

 <?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     > 
    <TextView 
     android:id="@+id/scores" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/hello" 
    android:paddingTop="35dip" android:paddingLeft="29dip" android:textColor="#000000"/> 
    </LinearLayout> 

에게 .. 제가 잘못 갈 수있는 위치 알고 위젯 제공자 XML을

감사합니다, 샘을 주시기 바랍니다

 <?xml version="1.0" encoding="utf-8"?> 
    <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.helloandroid.worldcupscores" 
     android:versionCode="1" 
     android:versionName="1.0"> 
     <application android:icon="@drawable/icon" android:label="@string/app_name"> 
      <!-- Broadcast Receiver that will process AppWidget updates --> 
      <receiver android:name=".WorldCupScores" android:label="@string/widget_name"> 
       <intent-filter> 
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
       </intent-filter> 
      <meta-data android:name="android.appwidget.provider" android:resource="@xml/scores_widget_provider" /> 
      </receiver> 

      <!-- Service to perform web API queries -->   
      <service android:name="WorldCupScores$UpdateService" /> 
     </application> 
     <uses-permission android:name="android.permission.INTERNET" /> 
     <uses-sdk android:minSdkVersion="7" /> 
    </manifest>    

WorldCupScores.java

 package com.helloandroid.worldcupscores; 

    import android.app.Activity; 
    import android.os.Bundle; 

    import java.util.Date; 

    import android.app.PendingIntent; 
    import android.app.Service; 
    import android.appwidget.AppWidgetManager; 
    import android.appwidget.AppWidgetProvider; 
    import android.content.ComponentName; 
    import android.content.Context; 
    import android.content.Intent; 
    import android.content.res.Resources; 
    import android.net.Uri; 
    import android.os.IBinder; 
    import android.text.format.Time; 
    import android.util.Log; 
    import android.widget.RemoteViews; 
    import android.app.Activity; 
    import android.app.AlarmManager; 
    import java.util.Calendar; 
    import java.util.GregorianCalendar; 
    import android.widget.Toast; 

    public class WorldCupScores extends AppWidgetProvider { 
     @Override 
     public void onUpdate(Context context, AppWidgetManager appWidgetManager, 
      int[] appWidgetIds) { 
      AlarmManager alarmManager; 
      Intent intent = new Intent(context, UpdateService.class); 
      PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, 
      intent, PendingIntent.FLAG_UPDATE_CURRENT); 
      alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
      Calendar cal = Calendar.getInstance(); 
      cal.setTimeInMillis(System.currentTimeMillis()); 
      cal.add(Calendar.SECOND, 10); 
      alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 5*1000, pendingIntent);  
     } 

     public static class UpdateService extends Service { 
      @Override 
      public void onStart(Intent intent, int startId) { 

      // Build the widget update for today 
      RemoteViews updateViews = new RemoteViews(this.getPackageName(), 
        R.layout.main); 

      Date date = new Date(); 

      updateViews.setTextViewText(R.id.scores, "Current Time " 
        + date); 

       // Push update for this widget to the home screen 
       ComponentName thisWidget = new ComponentName(this, WorldCupScores.class); 
       AppWidgetManager manager = AppWidgetManager.getInstance(this); 
       manager.updateAppWidget(thisWidget, updateViews); 
      } 

      @Override 
      public IBinder onBind(Intent intent) { 
       // We don't need to bind to this service 
       return null; 
      } 
     } 
    }     
+0

가능 중복 [안드로이드 경보 서비스에서 위젯을 업데이트하지 소성 (http://stackoverflow.com/questions/5369131/android-alarm-fire-to-update-widget-from-service) – CommonsWare

답변

0

변화

PendingIntent.FLAG_UPDATE_CURRENT 

intent.FLAG_ACTIVITY_NEW_TASK 
관련 문제