Android에서 홈 스크린 위젯을 만드는 법을 배우고 있습니다. 이 코드는 RingerMode를 NORMAL에서 SILENT로 또는 그 반대로 전환하는 앱 위젯 용 코드입니다.이 앱 위젯 스 니펫에있는 모든 인 텐트 (PendingIntents)의 논리적 흐름
괜찮 으면 좋겠지 만 논리적 인 흐름 (즉, 시작될 때, 시작되는 곳,가는 곳, 끝나는 곳, 종료 할 때까지)에 대한 모든 정보가 필요합니다.
이 주제를 분명히 이해하도록 도와주세요. 여전히
package com.dummies.android.silentmodetoggle;
import android.app.Activity;
import android.app.IntentService;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.media.AudioManager;
import android.util.Log;
import android.widget.RemoteViews;
public class AppWidget extends AppWidgetProvider {
public static String tag ="SilentModeToggleWidget";
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Log.d(tag, "onReceive() first line");
if(intent.getAction()==null)
{
//Do Something
Log.d(tag, "before startService()");
context.startService(new Intent(context, ToggleService.class));
}
else{
super.onReceive(context, intent);
}
}
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
// Do something in specified intervals
context.startService(new Intent(context, ToggleService.class));
}
public static class ToggleService extends IntentService{
public ToggleService(){
super("AppWidget$ToggleService");
Log.d(tag, "In ToggleService construcor");
}
@Override
protected void onHandleIntent(Intent arg0) {
Log.d(tag, "In ToggleService > onHandleIntent");
// TODO Auto-generated method stub
ComponentName cn = new ComponentName(this, AppWidget.class);
AppWidgetManager mgr = AppWidgetManager.getInstance(this);
mgr.updateAppWidget(cn, buildUpdate(this));
}
private RemoteViews buildUpdate(Context context){
RemoteViews updateViews = new RemoteViews(context.getPackageName(), R.layout.widget);
AudioManager audioManager = (AudioManager)context.getSystemService(Activity.AUDIO_SERVICE);
if(audioManager.getRingerMode() == AudioManager.RINGER_MODE_SILENT){
updateViews.setImageViewResource(R.id.phoneState, R.drawable.phone_on);
audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
}
else{
updateViews.setImageViewResource(R.id.phoneState, R.drawable.phone_silent);
audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
}
Intent i = new Intent(this, AppWidget.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
updateViews.setOnClickPendingIntent(R.id.phoneState, pi);
return updateViews;
}
}
}
"수명주기의 의도"를 클릭 할 때 다른 동작이 시작될 것임을 의미합니다. 죄송합니다. 인 텐트는 프레임 워크가 구성 요소를 시작하는 데 사용하는 정보를 저장하는 데이터 객체 일뿐입니다. 생명주기와 같은 것은 없습니다. – Budius
잘못된 용어 사용과 의도적 인 라이프 사이클의 부재에 대해 알려 주신 Mr @Budius에게 감사드립니다. 나는 그 질문을 바로 잡았다. 이제 이해할 수 있습니까? –