2010-01-14 2 views
0

나는 아날로그 시계를 표시하는 위젯을 가지고 있습니다. 내가 원하는 것은 사용자가 위젯을 클릭 할 때 위젯이 데이터베이스에 쓸 시간입니다. 이미 databaseHelper 클래스가 있으며 현재 날짜와 시간을 보여주는 화면을 표시하고 데이터베이스에 시간을 기록하는 Activity가 있습니다. 사용자가 위젯을 클릭 할 때 데이터베이스에 로깅

나는 여기에 튜토리얼을 따라 : Analog Clock Tutorial이 함께 결국 :

public void onReceive(Context context, Intent intent) 
{ 
    String action = intent.getAction(); 
    if (AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(action)) 
    { 
     RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget); 
     this.mIntent = new Intent(context, AskTheTime.class); 
     PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, mIntent, 0); 
     views.setOnClickPendingIntent(R.id.Widget, pendingIntent); 

     AppWidgetManager.getInstance(context).updateAppWidget(intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS), views); 
    } 
} 

AskTheTime 클래스는()에서 onCreate에서 데이터베이스 작업 및 로그를 확장합니다. 그러나 이는 위젯이 시작되었을 때만 표시된다는 것을 의미합니다. 클릭 한 시점이 아닙니다. (필자는 pendingIntent를 시작했기 때문에 이것이라고 생각합니다.) 데이터베이스를 다른 메서드로 작성해야하는지, 아니면 Intents를 사용하여 위젯에서 이런 일을해야하는지 잘 모르겠습니다. 어떤 포인터가 좋을 것입니다! 의도에 대한 여러 가지 자습서를 살펴 보았지만 그 중 아무 것도 나에게 분명하지 않은 것처럼 보입니다.

답변

1

위젯을 누르면 OS가 위젯에 설정 한 대기중인 의도를 활성화합니다.

위젯을 눌렀을 때 AskTheTime 활동을 여는 것처럼 보입니다.

그래서 위젯을 누르면 AskTheTime이 이미 생성되었을 수 있으므로 onCreate()은 다시 호출되지 않습니다. 당신이 무엇을 할 수 있는지

onStart() 또는 대신 onResume(), 또는 activity 내부 onCreate()에 추가하여 귀하의 로깅을 수행하려고합니다. onStart에 관한 문서에서

: 활동이 사용자에게 가 표시 될 때 호출

.

그리고 onResume : 활동이 사용자와 상호 작용 시작됩니다 때 호출

. 이 지점에서 귀하의 활동은 사용자 입력 으로가는 활동 스택의 상단에 있습니다.

관련 문제