質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Wear

Android Wearとは、Googleが発表した腕時計型ウェアラブルデバイス(スマートウォッチ)向けのプラットフォームです。GoogleのAndroid OSをベースにしており、情報の入手・管理などを行うことができます。

Q&A

解決済

1回答

2432閲覧

MessageAPIでhandleからwearに値を送りたい

takasama

総合スコア12

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Wear

Android Wearとは、Googleが発表した腕時計型ウェアラブルデバイス(スマートウォッチ)向けのプラットフォームです。GoogleのAndroid OSをベースにしており、情報の入手・管理などを行うことができます。

0グッド

1クリップ

投稿2016/07/10 02:09

###前提・実現したいこと
MessageAPIを利用して送信する方法が分からなくて詰まっています。
mobile\SubActivity.java内のIntsumKidoの値をwearに送るにはどうすればいいでしょうか。

先日SmartWatchを購入したばかりで勉強中です。
データの送受信について触れてみようと思っているのですが難しい…
Webでも調べたんですがpathやnodeの理解が浅いせいか、試行錯誤しても上手くいきませんでした。

###mobile\SubActivity.java

package com.example.taka.wtf; import android.app.Activity; import android.os.Bundle; import java.io.IOException; import java.util.Collection; import java.util.HashSet; import android.content.Context; import android.hardware.Camera; import android.util.Log; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Paint.Style; import android.graphics.PorterDuff.Mode; import android.graphics.SurfaceTexture; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.api.GoogleApiClient; import com.google.android.gms.common.api.GoogleApiClient.ConnectionCallbacks; import com.google.android.gms.common.api.GoogleApiClient.OnConnectionFailedListener; import com.google.android.gms.wearable.DataApi; import com.google.android.gms.wearable.DataMap; import com.google.android.gms.wearable.MessageApi; import com.google.android.gms.wearable.Node; import com.google.android.gms.wearable.NodeApi; import com.google.android.gms.wearable.PutDataMapRequest; import com.google.android.gms.wearable.PutDataRequest; import com.google.android.gms.wearable.Wearable; public class SubActivity extends Activity { private GoogleApiClient client; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); CameraView view = new CameraView(this); setContentView(view); this.client = new GoogleApiClient.Builder(this) .addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() { @Override public void onConnected(Bundle bundle) { Log.d("MyFragment", "onConnected"); } @Override public void onConnectionSuspended(int i) { Log.d("MyFragment", "onConnectionSuspended"); } }) .addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() { @Override public void onConnectionFailed(ConnectionResult connectionResult) { Log.d("MyFragment", "onConnectionFailed"); } }) .addApi(Wearable.API) .build(); this.client.connect(); } public class CameraView extends SurfaceView implements SurfaceHolder.Callback, Camera.PreviewCallback { private Camera mCamera = null; private SurfaceTexture mSurfaceTexture = null; private static final int Width = 640; private static final int Height = 480; private int Buffer; private float[] Kido; private int str; private static final int Width2 = 50; private static final int Scope = 200; private int strstr; private int Start; private Paint ShindenzuLine = new Paint(); private SurfaceHolder Holder = null; private float sumKido = 0.0f; private int frame = 0; private int IntsumKido; public CameraView(Context context) { super(context); ShindenzuLine.setColor(Color.rgb(0, 255, 0)); ShindenzuLine.setStrokeWidth(3); ShindenzuLine.setStyle(Style.STROKE); Holder = getHolder(); Holder.addCallback(this); } public void surfaceCreated(SurfaceHolder holder) { Buffer = getWidth(); Kido = new float[Buffer]; str = (Buffer - Width2 * 2) / Scope; mCamera = Camera.open(); try { mSurfaceTexture = new SurfaceTexture(0); mCamera.setPreviewTexture(mSurfaceTexture); } catch (IOException e) { e.printStackTrace(); } } public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { stopPreview(); Camera.Parameters params = mCamera.getParameters(); params.setPreviewSize(Width, Height); params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); mCamera.setParameters(params); Start = 0; strstr = 0; startPreview(); } public void surfaceDestroyed(SurfaceHolder holder) { stopPreview(); mCamera.release(); mCamera = null; } @Override public void onPreviewFrame(byte[] data, Camera camera) { Kido[strstr % Buffer] = KidoKeisan(data); strstr++; Shindenzu(); } private void startPreview() { mCamera.setPreviewCallback(this); mCamera.startPreview(); } private void stopPreview() { mCamera.setPreviewCallback(null); mCamera.stopPreview(); } private float KidoKeisan(byte[] data) { for (int y = Height / 4; y < Height * 3 / 4; y++) { for (int x = Width / 4; x < Width * 3 / 4; x++) { sumKido += (float) (data[y * Width + x] & 0xff); frame++; } } sumKido /= frame; IntsumKido = (int)sumKido; return sumKido; } private void Shindenzu() { int idx, idx_1; Canvas canvas = Holder.lockCanvas(); if (canvas != null) { canvas.drawColor(0, Mode.CLEAR); if (strstr >= Scope) { Start++; } for (int i = Start, x = 0; i < strstr - 1; i++, x++) { idx = i % Buffer; idx_1 = (i + 1) % Buffer; canvas.drawLine(x * str + Width2, (Kido[idx] - 80) * 20, (x + 1) * str + Width2, (Kido[idx_1] - 80) * 20, ShindenzuLine); } Holder.unlockCanvasAndPost(canvas); } } } }

###wear\MainActivity.java

package com.example.taka.wtf; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.MotionEvent; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.api.GoogleApiClient; import com.google.android.gms.wearable.DataApi; import com.google.android.gms.wearable.DataMap; import com.google.android.gms.wearable.PutDataMapRequest; import com.google.android.gms.wearable.PutDataRequest; import com.google.android.gms.wearable.Wearable; public class MainActivity extends Activity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener{ int gamenID = R.layout.rect_activity_main; private GoogleApiClient mGoogleApiClient; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.rect_activity_main); mGoogleApiClient = new GoogleApiClient .Builder(this) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .addApi(Wearable.API) .build(); } @Override protected void onResume() { super.onResume(); mGoogleApiClient.connect(); } @Override protected void onPause() { super.onPause(); if (mGoogleApiClient != null && mGoogleApiClient.isConnected()) { mGoogleApiClient.disconnect(); } } @Override public void onConnected(Bundle bundle) { Log.d("TAG", "onConnected"); } @Override public void onConnectionSuspended(int i) { Log.d("TAG", "onConnectionSuspended"); } @Override public void onConnectionFailed(ConnectionResult connectionResult) { Log.e("TAG", "onConnectionFailed: " + connectionResult); } @Override public boolean onTouchEvent(MotionEvent event) { if(event.getAction() == MotionEvent.ACTION_MOVE){ if(gamenID == R.layout.rect_activity_main){ setContentView(R.layout.lill); gamenID = R.layout.lill; } else if(gamenID == R.layout.lill){ setContentView(R.layout.resonance); gamenID = R.layout.resonance; } else if(gamenID == R.layout.resonance){ setContentView(R.layout.stress); gamenID = R.layout.stress; } else if(gamenID == R.layout.stress){ setContentView(R.layout.hi_stress); gamenID = R.layout.hi_stress; } } return super.onTouchEvent(event); } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

GoogleApiClientでコネクションは生成していますが
Messageを送る
受け取る
実装が無いですね

分からないので記述できないというのであれば、こちらに例がありますが
https://akira-watson.com/android/wear_messageapi.html

Message 送信ではThreadを立てて

Java

1public void run() { 2 3 NodeApi.GetConnectedNodesResult nodeResult = Wearable.NodeApi.getConnectedNodes(googleApiClient).await(); 4 5 for (Node node : nodeResult.getNodes()) { 6 SendMessageResult result = 7 Wearable.MessageApi.sendMessage(googleApiClient, node.getId(), path, handheldMessage.getBytes()).await(); 8 9 if (result.getStatus().isSuccess()) { 10 Log.d(TAG, "To: " + node.getDisplayName()); 11 Log.d(TAG, "Message = " + handheldMessage ); 12 } 13 else { 14 Log.d(TAG, "Send error"); 15 } 16 } 17 18}

初期のころはなかなかメッセージが送られず再送信なども必要でしたが、最近はバージョンアップされて多少良くなった感があります。

Wear側は
WearableListenerServiceを継承したクラスを作成して
onMessageReceived()でメッセージを受け取ります
そのメッセージはLocalBroadcastManagerを使って反映させるのがポイントでしょうか

投稿2016/07/11 01:05

aja

総合スコア3733

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takasama

2016/07/11 06:55

上記のプログラムに加えてMessageを送る、受け取る動作の実装をしたのですがまた新たな問題が発生したので質問を作り直させてもらいます。 回答をありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問