2013-07-10 2 views
1

나는 단순히 TextView 인 위젯을 가지고 있는데, AlarmManager를 사용하여 매초마다 업데이트하려고 시도하고있다. 응용 프로그램을 실행할 때 Log.d ("test", "hello1")가 LogCat에 나타나지만 Log.d ("test", "service")는 나타나지 않으므로 프로그램이 표시되지 않습니다. 심지어 내 MyService 클래스에 도달했습니다.AlarmManager가 내 위젯을 업데이트하지 않는 이유는 무엇입니까?

대단히 감사하겠습니다.

감사합니다.

public class NetworkSpeedWidget extends AppWidgetProvider { 

private PendingIntent service = null; 

@Override 
public void onUpdate(Context context, AppWidgetManager appWidgetManager, 
     int[] appWidgetIds) { 
    Log.d("test", "hello"); 
    super.onUpdate(context, appWidgetManager, appWidgetIds); 
    final AlarmManager m = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
    final Intent i = new Intent(context, MyService.class); 
    if (service == null) 
    { 
     service = PendingIntent.getService(context, 0, i, PendingIntent.FLAG_CANCEL_CURRENT); 
    } 
    Log.d("test", "hello1"); 
    m.setRepeating(AlarmManager.RTC, System.currentTimeMillis(),1000,service); 

} 

} 여기

내이면 MyService 클래스입니다 :

public class MyService extends Service{ 
@Override 
public void onCreate() 
{ 
    Log.d("test", "service"); 
    super.onCreate(); 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) 
{ 
    buildUpdate(); 

    return super.onStartCommand(intent, flags, startId); 
} 

private void buildUpdate() 
{ 


    MainActivity object = new MainActivity(); 
    String objectString = object.getMegaBitsPerSecondString(); 

    AppWidgetManager manager = AppWidgetManager.getInstance(this); 
    ComponentName thisWidget = new ComponentName(this, NetworkSpeedWidget.class); 
    int[]ids = manager.getAppWidgetIds(thisWidget); 
    final int N = ids.length; 
    for (int i = 0; i < N; i++){ 
     int awID = ids[i]; 
     RemoteViews v = new RemoteViews(getPackageName(), R.layout.widget); 
     v.setTextViewText(R.id.widgetTextView,objectString);    
     manager.updateAppWidget(awID, v); 
    } 
} 

@Override 
public IBinder onBind(Intent intent) 
{ 
    return null; 
} 
} 
+1

PendingIntent : http://developer.android.com/reference/android/app/PendingIntent.html#send(int)를 보내야합니다. 그리고 당신은 당신의 매니페스트에서 그 봉사를 선언 했습니까? – jul

+0

그게 다야! 나는 내 선언서에 그 봉사를 선포하지 않았다. 정말 고맙습니다. 그리고 나는 Handlers를 다루지 않기 때문에 PendingIntent가 작동한다고 생각하지 않습니다. 나는 이클립스가 내 서비스가 선언되지 않은 경고 또는 플랫 아웃 오류를주지 않았다는 것에 놀랐다. – Richard

답변

2

내 모든 코드가 정확한지, 난 그냥 내 매니페스트에 선언하는 데 필요한 다음

내의 AppWidgetProvider 클래스입니다 .

<service android:enabled="true" android:name=".MyService" /> 

당신의 도움을 7월 주셔서 감사합니다 :

은 단순히 다음 줄을 추가했다.

관련 문제