Help us understand the problem. What is going on with this article?

Android Studioを使用して、とりあえず動くWatch faceを作る(1/3)

More than 3 years have passed since last update.

冬休みに、色々なサイトを参考にしてAndroid wear用のWatch faceを作りました。
その時の手順をメモがてらにまとめてみました。

対象

  • Eclipse + ADT 又は Android Studioを使用して、"Hello, World"を表示したことがあるくらいの人。
  • 利用したのはMacなので、Windowsを使用するときは、画面や手順に若干の差異があるかもしれません。

環境構築

まずは、Android developersのサイトから、Android Studioをダウンロードします。ダウンロードができたら、Android SDKのアップデートや、JDKのパス設定を行いましょう。

Android SDKのアップデート

  • Android Studioのメニューから、"Tools"→"Android"→"SDK Manager"を選択し、SDK Managerを起動します。
  • SDK toolsはVer.23以上のものを、SDKについてはAndroid 5.0(API21)以上のものを、すべてダウンロードしておきましょう。(Android wearアプリのなかでも、Watch faceアプリ作成のためには、API21が必要です。)

Update Your SDK

JDKのパス設定

  • 以下のサイトが参考になると思います。

Android StudioにおけるAndroidSDKやJDKのパス設定

プロジェクト作成

Watch face作成用のプロジェクト作成

  • Android Studioのメニューから、"File"→"New Project"で、新規プロジェクトを作成します。
  • "Select the form factors your app will run on"のところで、"Phone and Tablet"と、"Wear"を選びます。APIは、それぞれ21にします。1
  • その後は、とりあえずすべてデフォルトの設定で。(Blank Activity)

Dependenciesの設定

スクリーンショット 2015-01-03 18.29.03.png

  • 画面左上の部分から、build.gradle(Module: mobile)を開きましょう。
  • 以下のように設定されているかを確認します。(数字部分は微妙に異なる可能性があります)
apply plugin: 'com.android.application'

android { ... }

dependencies {
    ...
    wearApp project(':wear')
    compile 'com.google.android.gms:play-services:6.5.+'
}
  • 次に、同様にしてbuild.gradle(Module: wear)を開きましょう。
  • 以下のように設定されているかを確認します。(数字部分は微妙に異なる可能性があります)
apply plugin: 'com.android.application'

android { ... }

dependencies {
    ...
    compile 'com.google.android.support:wearable:1.1.+'
    compile 'com.google.android.gms:play-services-wearable:6.5.+'
}

Create and Configure Your Projectの、Dependencies

Permissionsの設定

  • Watch faceアプリには、"PROVIDE_BACKGROUND"と"WAKE_LOCK"の2つのpermissionの宣言が必要となります。"PROVIDE_BACKGROUND"は、mobileからwearに自動的にアプリをインストールすることを許可するパーミッションです。また、"WAKE_LOCK"は、WakeLockクラス(アプリの起動状態の管理)を利用できるようにするものです。

Android Wear用アプリの花形、時計アプリ「Watch Face」の基本的な作り方(2/3)

スクリーンショット 2015-01-03 19.19.36.png

  • 画面左上の部分から、wearのAndroidManifes.xmlを開きましょう。
  • 以下のように<uses permission>を設定します。とりあえず、<manifest ...>のすぐ後に入れましょう。
<manifest ...>
    <uses-permission
        android:name="com.google.android.permission.PROVIDE_BACKGROUND" />
    <uses-permission
        android:name="android.permission.WAKE_LOCK" />
    ...
</manifest>
  • 今度は、mobileのAndroidManifest.xmlを開きます。
  • wearと同様に、以下のように設定します。こちらも、ひとまず<manifest ...>のすぐ後に入れましょう。
  • wearで宣言したパーミッションは、mobileでも必ず宣言する必要があります。
<manifest ...>
    <uses-permission
        android:name="com.google.android.permission.PROVIDE_BACKGROUND" />
    <uses-permission
        android:name="android.permission.WAKE_LOCK" />
    ...
</manifest>

Create and Configure Your Projectの、Declare Permissions

Serviceの作成と設定

Watch faceは、Serviceとして定義します。当該Serviceは、Watch faceが起動中に、時間が進んだ時や、重要なeventが発生した時に、システムから呼び出され実行される事となります。(重要なevent:アンビエントモードへの(からの)移行時、新しいnotificationの受領時等)

そこで、Serviceの作成と、当該ServiceについてAndroidManifest.xmlへの登録が必要となります。

Serviceファイルの作成

  • wear→java→xxx.xxx.xxx内の、"MainActivity.java"を削除します。
  • 同じ場所に、"AnalogWatchFaceService.java"というファイルを作成します。2 スクリーンショット 2015-01-03 20.17.12.png

Create and Configure Your Project

AndroidManifest.xmlからのactivityの削除、およびserviceの登録

  • wear内の、AndroidManifest.xmlを開きます。
  • AndroidManifest.xmlから、<activity ...>〜</activity>を削除します。
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name">
      <intent-filter>
        <action android:name="android.intent.action.MAIN"/>

        <category android:name="android.intent.category.LAUNCHER"/>
      </intent-filter>
    </activity>
  • 上記<activity ...>〜</activity>があった場所に、以下を挿入します。
<service
    android:name=".AnalogWatchFaceService"
    android:label="@string/app_name"
    android:allowEmbedded="true"
    android:taskAffinity=""
    android:permission="android.permission.BIND_WALLPAPER" >
    <meta-data
        android:name="android.service.wallpaper"
        android:resource="@xml/watch_face" />
    <meta-data
        android:name="com.google.android.wearable.watchface.preview"
        android:resource="@drawable/preview" />
    <meta-data
        android:name="com.google.android.wearable.watchface.preview_circular"
        android:resource="@drawable/preview_circular" />
    <intent-filter>
        <action android:name="android.service.wallpaper.WallpaperService" />
        <category
            android:name=
            "com.google.android.wearable.watchface.category.WATCH_FACE" />
    </intent-filter>
</service>

android:allowEmbedded="true"は、このactivity(service)を、他のactivityの埋め込み子アクティビティとして起動できるようにするものです。
android:taskAffinity=""は、このactivity(service)を、いずれのactivityとも異なるaffinityとして設定し、独立したTaskとして設定しています。Taskは、activityの集まりです。3
android:permission="android.permission.BIND_WALLPAPER"は、WallpaperServiceクラスを使用する際に必要です。

android.service.wallpaperは、Live wallpaperのリソースを定義しています。
com.google.android.wearable.watchface.preview及びcom.google.android.wearable.watchface.preview_circularについては、それぞれ四角形と円形のwatch faceアプリにおけるプレビューとして表示される画像のリソースを定義しています。

watch_face.xml(resource file)の作成

  • wear→resに、"xml"Directoryを作成し、その中に"watch_face.xml"というファイルを作成します。
  • "watch_face.xml"の中身は、以下のようにします。
<?xml version="1.0" encoding="UTF-8"?>
<wallpaper xmlns:android="http://schemas.android.com/apk/res/android" />

スクリーンショット 2015-01-03 21.08.24.png

Serviceの実装以降

2/3に続きます。

参考にしたサイト等

美女時計を作ろう!Android Wear開発入門 30分で作る盤面アプリ
Building a Watch Face Service(Android developers)


  1. なぜ"Phone and Tablet"についても選ぶかですが、Google Play storeにおいて、Watch Faceのようなwearableアプリは、"companion"と呼ばれる、PhoneやTablet用のアプリにバンドルされる形で配信されるからです。Google Play storeにて配信するのでなければ、Wearのみでも良いかと思います。>Creating and Running a Wearable App 

  2. "〜.java"という形であれば名前はなんでもいいです。 

  3. App Manifest 

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした