저번 글에서는 홈스크린 위젯의 기초에 대해 알아보았으니, 이번 글에서는 홈스크린 위젯에서 상호작용을 할 수 있도록 버튼을 추가해보겠습니다.
지난번에 작업한 예제를 바탕으로 예제를 만들어보겠습니다. 실습을 시작하기 전에 예제를 미리 준비해주세요.
[어플리케이션 정보]
액티비티
레이아웃
XML
액티비티
- SimpleActivity.java (SimpleActivity)
레이아웃
- simpleactivity.xml (SimpleActivity)
- simple_widget_layout.xml (위젯 레이아웃)
XML
- simplewidget.xml (위젯 프로바이더)
API Level
- 8 (Android 2.2)
이번 강좌에서는 위젯에 버튼을 추가하고, 버튼을 누르면 액티비티를 호출하도록 만들어보겠습니다. 먼저 위젯의 레이아웃을 다음과 같이 수정합니다. 버튼이 하나 추가되었습니다.
[simple_widget_layout.xml]
01.
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
02.
<
LinearLayout
03.
xmlns:android
=
"http://schemas.android.com/apk/res/android"
04.
android:background
=
"@drawable/widget_background_4_1"
05.
android:gravity
=
"center"
06.
android:layout_height
=
"wrap_content"
07.
android:layout_width
=
"fill_parent"
08.
>
09.
<
TextView
10.
android:layout_width
=
"wrap_content"
11.
android:layout_height
=
"wrap_content"
12.
android:textColor
=
"#000000"
13.
android:textSize
=
"20dp"
14.
android:id
=
"@+id/simple_widget_layout_text"
15.
android:text
=
"Hello, Widget!"
/>
16.
17.
<
Button
18.
android:layout_width
=
"wrap_content"
19.
android:layout_height
=
"wrap_content"
20.
android:id
=
"@+id/simple_widget_layout_activity"
21.
android:layout_marginLeft
=
"10dp"
22.
android:text
=
"Activity"
/>
23.
24.
</
LinearLayout
>
다음, 위젯 소스코드를 다음과 같이 수정합니다.
[MySimpleWidget.java]
01.
public
class
MySimpleWidget
extends
AppWidgetProvider {
02.
03.
@Override
04.
public
void
onUpdate(Context context, AppWidgetManager appWidgetManager,
int
[] appWidgetIds){
05.
final
int
N = appWidgetIds.length;
06.
07.
for
(
int
i=
0
; i<N; i++) {
08.
int
appWidgetId = appWidgetIds[i];
09.
RemoteViews views = buildViews(context);
10.
appWidgetManager.updateAppWidget(appWidgetId, views);
11.
}
12.
}
13.
14.
private
PendingIntent buildActivityIntent(Context context){
15.
Intent intent =
new
Intent(Intent.ACTION_VIEW)
16.
.setData(Uri.parse(
"http://google.com"
));
17.
PendingIntent pi = PendingIntent.getActivity(context,
0
, intent, Intent.FLAG_ACTIVITY_NEW_TASK);
18.
return
pi;
19.
}
20.
21.
private
RemoteViews buildViews(Context context){
22.
RemoteViews views =
new
RemoteViews(context.getPackageName(), R.layout.simple_widget_layout);
23.
views.setOnClickPendingIntent(R.id.simple_widget_layout_activity, buildActivityIntent(context));
24.
return
views;
25.
}
26.
}
버튼을 눌렀을 때 액티비티를 띄우기 위해 buildActivityIntent()에서 PendingIntent를 생성하고, setOnClickPendingIntent()를 통해 버튼을 클릭했을 때 수행할 PendingIntent를 지정합니다. 홈스크린 위젯에서 액티비티를 호출할 때는 액티비티 스택이 없는 상태이므로 Intent.FLAG_ACTIVITY_NEW_TASK 플래그를 지정하여 액티비티가 새로운 태스크에서 실행되도록 지정해야 합니다.
예제를 실행하고, 홈스크린에 위젯을 추가하면 다음과 같이 버튼이 위젯에 버튼이 추가된 모습을 확인하실 수 있습니다.
위젯의 버튼을 누르면 다음과 같이 브라우저가 실행되면서 지정한 페이지가 표시됩니다.
'android' 카테고리의 다른 글
안드로이드 개발 추천 사이트 (0) | 2013.07.16 |
---|---|
안드로이드 연락처 목록 가져오기/삭제하기 방법 (0) | 2013.07.16 |
webview에서 googlemap 현재위치 불러오기 (0) | 2013.07.03 |
android 퍼미션 종류별 정리 (0) | 2013.07.02 |
안드로이드 웹뷰(webview)안에서 alert 처리 (1) | 2013.07.01 |