7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Android WearからMobileへメッセージを送る

Last updated at Posted at 2015-02-05

WaerとWearって紛らわしいですよね。
http://www.appbank.net/2013/10/31/iphone-application/693334.php

今回はAndroid Wearから携帯電話へメッセージを送るチュートリアルです。
同期的・非同期的やサービスなど、一重にメッセージを送るだけでもいくつか手段がありますが今回は
Android Wearからスマホへ、非同期にメッセージを送る
という事だけ達成出来ればと思います。

1 既存プロジェクトにAndroid Wearのモジュールを追加する

スクリーンショット 2015-02-06 2.18.02.png
File>New Module...
からモジュールを追加します。
スクリーンショット 2015-02-06 2.18.26.png
今回はWatch InterFaceなのでAndroid Wear Moduleを選択します。
スクリーンショット 2015-02-06 2.20.03.png
Packgae name:は必ずスマホ用のアプリと同じにしてください。(同じにしないとメッセージの送信が届きません。これで1日無駄にしました。)
この後は気にすることはありません。finishまでnextを押し続けます。

2 時計側からの送信部分を書く

概要は、ボタンを押したら送信されるという感じです。
以下は時計側のコードです。

MainActivity.java

@Override
        public View onCreateContentView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            initApi();
            Button button = new Button(this.getActivity());
            button.setText("OK");
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    sendToast(getActivity());
                }
            });
            return button;
        }

private void sendToast(final Context context) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    GoogleApiClient client = new GoogleApiClient.Builder(context)
                            .addApi(Wearable.API)
                            .build();
                    client.blockingConnect(100, TimeUnit.MILLISECONDS);
                    NodeApi.GetConnectedNodesResult result =
                            Wearable.NodeApi.getConnectedNodes(client).await();
                    List<Node> nodes = result.getNodes();
                    if (nodes.size() > 0) {
                        client.blockingConnect(100, TimeUnit.MILLISECONDS);
                        Wearable.MessageApi.sendMessage(client, nodes.get(0).getId(), "hello", null);
                        client.disconnect();
                    }
                    client.disconnect();
                }
            }).start();
        }

3 受信側のサービスを作る

受信側のサービスを作ります。
概要は、メッセージを受け取ったらトーストを表示する。です

スマホアプリの方にWatchServiceというjavaファイルを作り以下のように実装します。

WatchService.java
public class WatchService extends WearableListenerService {
    @Override
    public void onMessageReceived(MessageEvent messageEvent) {
        showToast(messageEvent.getPath());
    }

    private void showToast(String message) {
        Toast.makeText(this, message, Toast.LENGTH_LONG).show();
    }
}

4 AndroidManifest.xmlの修正

AndroidManifest.xml
<meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />

上記の記述をスマホ・時計の両方のAndroidManifest.xmlのApplication下に書きます。

AndroidManifest.xml
        <service
            android:name=".WatchService" >
            <intent-filter>
                <action android:name="com.google.android.gms.wearable.BIND_LISTENER" />
            </intent-filter>
        </service>

上記をスマホ側のAndroidManifest.xmlのApplication下に書くことでWatchServiceを受け取る準備をさせます。

5 実行

スマホ側・時計側のアプリをそれぞれインストールさせて、時計側のボタンを押してスマホにトーストが表示されれば成功です!

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?