안드로이드 개발 질문/답변
(글 수 45,052)
질문 답변이 없으셔서...다시한번 올려봅니다. 위젯 개발해보신분이라면 답변 함 부탁드립니다 꾸벅 (--) (__)
---
위젯을 바탕화면에 등록할때는, 잘 먹힙니다.
그런데 시간이 지나면, 다음날이라던지 저녁쯤 음악 다시 들을때, 버튼을 누르면 반응이 없어요.
이클립스의 LogCat으로 확인해보니깐,
버튼을 누른것에 대한 하드웨어적인 인식은 당연히 되는데,
버튼을 누를때, 소프트웨어적인 반응 (onclick)이 logcat에 안나와요.
소스가 몇줄 되지도 않아서, 머가 잘못된건지 잘 모르겠어요.
아래는 실제 소스입니다.
----------
//이건 기본 함수
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
System.out.println("myWidget:onUpdate");
final int N = appWidgetIds.length;
for(int i = 0; i < N; i++) {
int appWidgetId = appWidgetIds[i];
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context);
boolean transparent = pref.getBoolean("pcEtcTWidget", true);
updateWidget(context, appWidgetManager, appWidgetId,
context.getString(R.string.btnWidgetTitle),
context.getString(R.string.btnWidgetArtist),
false, transparent);
}
if (N > 0)
commandService(context, "WIDGET_ENABLED");
}
// 이건 위젯UI 갱신이 필요할때 호출되는 함수
// 위의 OnUpdate()라던지, activity에서 갱신이 필요할때마다 호출됨
public static void updateWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId,
String title, String artist, boolean isPlaying, boolean transparent)
{
// Get the layout for the App Widget and attach an on-click listener to the button
RemoteViews views = null;
if (transparent) {
System.out.println("semi-transparent widget");
views = new RemoteViews(context.getPackageName(), R.layout.widget_default_t);
if (isPlaying)
views.setImageViewResource(R.id.btnWidgetDefaultPlay, R.drawable.widget_btn_play_pressed_t);
else
views.setImageViewResource(R.id.btnWidgetDefaultPlay, R.drawable.widget_btn_play_t);
}
else {
System.out.println("normal widget");
views = new RemoteViews(context.getPackageName(), R.layout.widget_default);
if (isPlaying)
views.setImageViewResource(R.id.btnWidgetDefaultPlay, R.drawable.widget_btn_play_pressed);
else
views.setImageViewResource(R.id.btnWidgetDefaultPlay, R.drawable.widget_btn_play);
}
views.setTextViewText(R.id.tvWidgetDefaultArtist, artist);
views.setTextViewText(R.id.tvWidgetDefaultTitle, title);
PendingIntent piPlay = PendingIntent.getBroadcast(context, 0, new Intent(WIDGET_ACTION_PLAY), PendingIntent.FLAG_UPDATE_CURRENT);
views.setOnClickPendingIntent(R.id.btnWidgetDefaultPlay, piPlay);
PendingIntent piPrev = PendingIntent.getBroadcast(context, 0, new Intent(WIDGET_ACTION_PREV), PendingIntent.FLAG_UPDATE_CURRENT);
views.setOnClickPendingIntent(R.id.btnWidgetDefaultPrev, piPrev);
PendingIntent piNext = PendingIntent.getBroadcast(context, 0, new Intent(WIDGET_ACTION_NEXT), PendingIntent.FLAG_UPDATE_CURRENT);
views.setOnClickPendingIntent(R.id.btnWidgetDefaultNext, piNext);
PendingIntent playView = PendingIntent.getActivity(context, 0, new Intent(context, MusicPlay.class), 0);
views.setOnClickPendingIntent(R.id.LinearLayoutWidgetText, playView);
// Tell the AppWidgetManager to perform an update on the current App Widget
appWidgetManager.updateAppWidget(appWidgetId, views);
}