336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
Activity 측의 코드
// MainActivity.java package com.example.widgettest; import android.app.*; import android.appwidget.*; import android.content.*; import android.os.*; import android.view.*; import android.widget.*; public class MainActivity extends Activity { private TextView textView1 = null; private EditText editText1 = null; private Button button1 = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.textView1 = (TextView)this.findViewById(com.example.widgettest.R.id.textView1); this.editText1 = (EditText)this.findViewById(com.example.widgettest.R.id.editText1); this.button1 = (Button)this.findViewById(com.example.widgettest.R.id.button1); // 버튼 클릭할 경우 this.button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub // 액티비티와 Widget간의 데이터 전달 매개체로 SharefPreferences를 사용합니다. 코코아 프레임워크의 NSUserDefaults에 해당합니다. SharedPreferences sharedPreferences = MainActivity.this.getSharedPreferences("com.example.widgettest.sharedPreferences", Context.MODE_WORLD_WRITEABLE); SharedPreferences.Editor editor = sharedPreferences.edit(); // 에디터를 사용해 editText1에 있는 문자열을 textBox라는 이름으로 SharedPreferences에 저장합니다. editor.putString("textBox", MainActivity.this.editText1.getText().toString()); editor.commit(); // Widget에게 값이 변경되었으니 업데이트하라는 메시지를 Broadcast를 통해 전달합니다. Intent intent = new Intent(MainActivity.this, Widget.class); intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE); MainActivity.this.sendBroadcast(intent); } }); } }
2. Widget측의 코드
// WidgetProvider.java package com.example.widgettest; import android.app.*; import android.appwidget.*; import android.content.*; import android.widget.*; public class WidgetProvider extends AppWidgetProvider { @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { // TODO Auto-generated method stub super.onUpdate(context, appWidgetManager, appWidgetIds); for (int appWidgetId : appWidgetIds) { RemoteViews remoteViews = new RemoteViews(context.getPackageName(), com.example.widgettest.R.layout.widget); Intent intent = new Intent(context, MainActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); remoteViews.setOnClickPendingIntent(R.id.button1, pendingIntent); // 새로 고침 작업을 별도의 메서드로 빼기 this.refresh(context, remoteViews); // 새로 고침 작업이 완료 후 위젯에게 업데이트 할 것을 통지 appWidgetManager.updateAppWidget(appWidgetId, remoteViews); } } private void refresh(Context context, RemoteViews remoteViews) { // Activity에서 만든 것과 같은 식별자를 갖는 SharedPreferences를 생성 SharedPreferences sharedPreferences = context.getSharedPreferences("com.example.widgettest.sharedPreferences", Context.MODE_WORLD_WRITEABLE); // textBox라는 이름을 갖는 문자열 변수가 있다면 그것을 가져오고, 없으면 기본값으로 "HaHaHa"를 반환 // 반환된 문자열은 위젯에서 textView1이라는 TextView에 전달 remoteViews.setTextViewText(com.example.widgettest.R.id.textView1, sharedPreferences.getString("textBox", "HaHaHa")); } }
실행 결과
'Application Programming Interface > Android' 카테고리의 다른 글
인텐트를 통한 액티비티간 결과값 전달하기 (0) | 2015.04.20 |
---|---|
위젯 업데이트 주기 빠르게 하기 (1) | 2015.03.18 |
MediaRecorder 클래스 사용법 (소리 편) (0) | 2015.02.09 |
MediaPlayer 클래스 사용법 (0) | 2015.02.06 |
위젯 구현하기 (0) | 2015.02.05 |