###前提・実現したいこと
mobile\SubActivity内のsumKidoの値を1秒毎にwearに送って、その値をwearの画面上に表示するプログラムを作ろうと思っています。
sumKidoをMessageAPIで送れるbyte配列にするために、一旦KidoOkuriというString型の配列に代入してから1秒ごとにsendMessageToWearでbyte配列にしてwearに送る処理をするプログラム(mobile),
送られてきた値を画面上にTextView, setTextで表示するプログラム(wear)
を書いたつもりなんですが実行してもwearの画面に値が表示されないままになってしまいます。
なぜだ!(笑)現在試行錯誤していますが現状手詰まりです…
###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 java.util.Timer; import java.util.TimerTask; import android.content.Context; import android.hardware.Camera; 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.api.GoogleApiClient; 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.Wearable; public class SubActivity extends Activity { private final static String OKURUATAI = "/itti"; private GoogleApiClient mGoogleApiClient; private float sumKido = 0.0f; private static String KidoOkuri = ""; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); CameraView view = new CameraView(this); setContentView(view); mGoogleApiClient = new GoogleApiClient.Builder(this) .addApi(Wearable.API) .addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() { @Override public void onConnected(Bundle bundle) { } @Override public void onConnectionSuspended(int cause) { } }).build(); mGoogleApiClient.connect(); Timer timer = new Timer(""); timer.scheduleAtFixedRate(new TestTimerTask(), 1 * 1000, 1 * 1000); } class TestTimerTask extends TimerTask { public void run() { KidoOkuri = String.valueOf(sumKido); sendMessageToWear(); KidoOkuri = ""; } } 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; 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) { int frame = 0; 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; 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); } } } private Collection<String> getNodes() { HashSet<String> results = new HashSet<String>(); NodeApi.GetConnectedNodesResult nodes = Wearable.NodeApi.getConnectedNodes(mGoogleApiClient).await(); for (Node node : nodes.getNodes()) { results.add(node.getId()); } return results; } private void sendMessageToWear() { Collection<String> nodes = getNodes(); for (String node : nodes) { MessageApi.SendMessageResult result = Wearable.MessageApi.sendMessage(mGoogleApiClient, node, OKURUATAI, KidoOkuri.getBytes() ).await(); } } }
###wear\MainActivity.java
package com.example.taka.wtf; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.MotionEvent; import android.widget.TextView; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.api.GoogleApiClient; import com.google.android.gms.wearable.MessageEvent; import com.google.android.gms.wearable.Wearable; import com.google.android.gms.wearable.WearableListenerService; public class MainActivity extends Activity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener{ int gamenID = R.layout.rect_activity_main; private GoogleApiClient mGoogleApiClient; int Shin; @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); } public class DataLayerListenerService extends WearableListenerService { private final static String OKURUATAI = "/itti"; @Override public void onMessageReceived(MessageEvent messageEvent) { if (OKURUATAI.equals(messageEvent.getPath())) { final String message = new String(messageEvent.getData()); Shin = Integer.parseInt(message); TextView text = (TextView)findViewById(R.id.textView2); text.setText(Shin); } } } }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。