본문 바로가기
안드로이드

안드로이드 - 라이브 배경화면(Live Wallpaper) #1 기본구조

by Dokon Jang 2015. 6. 12.
반응형

[라이브 배경화면(Live Wallpaper) 개발 포스팅]

 - 라이브 배경화면(Live Wallpaper) #1 기본구조 : http://docko.tistory.com/132
 - 라이브 배경화면(Live Wallpaper) #2 이미지 넣기 : http://docko.tistory.com/134
 - 라이브 배경화면(Live Wallpaper) #3 설정화면 만들기 : http://docko.tistory.com/143

 

 

안드로이드의 라이브 배경화면(Live Wallpaper)을 만들기 위한 기본 작업을 해보도록 하겠습니다.

아래의 3단계로 작업을 진행하도록 하겠습니다.

 

(1) 라이브 배경화면 클래스

(2) 라이브 배경화면 xml

(3) AndroidManifest.xml 설정

 

1. 라이브 배경화면 클래스

 (1) 클래스 생성

   - 원하는 package에서 마우스 우측 클릭하여, 아래의 이미지에서 처럼 Java Class를 클릭합니다.

 

   - Create New Class 다이얼로그에서 Name을 입력하고, OK를 클릭합니다. 

 

 (2) 라이브 배경화면 클래스 구현

   - 라이브 배경화면을 구성하기 위해서는 "android.app.WallpaperManager"클래스를 상속 받아야한다.

   - "android.app.WallpaperManager"의 추상 메소드 "public Engine onCreateEngine()"를 구현해야합니다.

import android.service.wallpaper.WallpaperService;

public class MyWallpaper extends WallpaperService{
    @Override
    public Engine onCreateEngine() {
        return null;
    }
}
 

 

2. 라이브 배경화면 XML

 라이브 배경화면의 아이콘, 배경화면을 설정 할 Activity 등의 라이브 배경화면을 설정하는 XML파일입니다.

 (1) 리소스 폴더 생성

   - 안드로이드 프로젝트를 새로 생성했다면 안드로이드 리소스 폴더가 존재하지 않는다.

   - 아래와 같이 안드로이드 리소스 폴더 "xml"을 생성합니다.

 

 (2) 라이브 배경화면 리소스 xml 파일을 생성합니다.

   - 리소스 폴더인 "res"를 선택 후 마우스 오른쪽 클릭을 하여 New > XML resource file을 선택합니다.

 

  - New XML Resource File 다이얼로그에서 File name과 Root element에 "wallpaper"를 입력 후 OK를 클릭합니다.

 

 - 아래와 같이 xml 리소스 폴더에 mywallpaper.xml 파일 생성됩니다.

 

  - 라이브 배경화면 xml을 아래와 같이 변경합니다.

<?xml version="1.0" encoding="utf-8"?>
<wallpaper xmlns:android="http://schemas.android.com/apk/res/android"
    android:thumbnail="@drawable/ic_launcher">
</wallpaper>
 

 

3. AndroidManifest.xml 설정

 (1) 라이브 배경화면에 대한 서비스를 <application> 태그에 등록합니다.

<!-- Wallpaper -->
<service android:name=".MyWallpaper"
    android:label="@string/app_name"
    android:permission="android.permission.BIND_WALLPAPER">
    <intent-filter>
    <action android:name="android.service.wallpaper.WallpaperService"/>
    </intent-filter>
    <meta-data android:name="android.service.wallpaper" android:resource="@xml/mywallpaper"/>
</service>
 

 

  (2) 라이브 배경화면의 퍼미션을 <manifest> 태그에 등록합니다.

<uses-feature android:name="android.software.live_wallpaper" />
 

 

[AndroidManifest.xml 소스]

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.jmsys.mywallpaper">

    <application android:allowBackup="true" android:label="@string/app_name"
        android:icon="@drawable/ic_launcher" android:theme="@style/AppTheme">

        <!-- Wallpaper -->
        <service android:name=".MyWallpaper"
            android:label="@string/app_name"
            android:permission="android.permission.BIND_WALLPAPER">
            <intent-filter>
                <action android:name="android.service.wallpaper.WallpaperService"/>
            </intent-filter>
            <meta-data android:name="android.service.wallpaper" android:resource="@xml/mywallpaper"/>
        </service>
    </application>

    <!-- Wallpaper Permission -->
    <uses-feature android:name="android.software.live_wallpaper" />

</manifest>
 

 

4. 실행하기 및 오류 수정

 주의) Main Activity가 없으면 에뮬레이터 또는 안드로이드 폰에서 실행 할 수가 없습니다.

 

 (1) 안드로이드 폰에서 배경화면 지정에서 My Wallpaper를 선택합니다.

 

  (2) 아래와 같이 오류가 발생합니다.

 

 (3) 오류 수정하기  

  - 원인은 MyWallpaper 클래스에서 재정의한 onCreateEngine의 리턴 값이 null이기 때문입니다.

@Override
public Engine onCreateEngine() {
    return null;
}
 
 

  - 아래의 소스와 같이 수정하면 오류는 발생하지 않습니다.

import android.service.wallpaper.WallpaperService;

public class MyWallpaper extends WallpaperService{
    @Override
    public Engine onCreateEngine() {
        return new Engine();
    }
}
 

 

기본적인 라이브 배경화면 클래스, xml, AndroidMainfest 작업은 완료했습니다.

다음 포스팅에는 지금까지 작업한 라이브 배경화면에 이미지를 넣는 작업을 하겠습니다.

 

반응형

댓글