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 |