私の電話からメッセージAPIを介してandroidWearにメッセージを送信しようとしました。これまでのところ動作していないし、なぜ私は考えが不足している。Phone to Wearメッセージ(メッセージAPI経由)が受信されませんでした
私がメッセージを送信する携帯電話で簡単なアプリを持って、ここにコードがある:私は、送信ボタンをクリックすると
public class MainActivity extends Activity
implements GoogleApiClient.ConnectionCallbacks {
private static final String START_ACTIVITY = "/start_activity";
private static final String WEAR_MESSAGE_PATH = "/message";
private GoogleApiClient mApiClient;
private ArrayAdapter<String> mAdapter;
private ListView mListView;
private EditText mEditText;
private Button mSendButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
initGoogleApiClient();
}
private void initGoogleApiClient() {
mApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addApi(Wearable.API)
.build();
mApiClient.connect();
}
@Override
protected void onDestroy() {
super.onDestroy();
mApiClient.disconnect();
}
private void init() {
mListView = (ListView) findViewById(R.id.list_view);
mEditText = (EditText) findViewById(R.id.input);
mSendButton = (Button) findViewById(R.id.btn_send);
mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);
mListView.setAdapter(mAdapter);
mSendButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String text = mEditText.getText().toString();
if (!TextUtils.isEmpty(text)) {
mAdapter.add(text);
mAdapter.notifyDataSetChanged();
sendMessage(WEAR_MESSAGE_PATH, text);
}
}
});
}
private void sendMessage(final String path, final String text) {
new Thread(new Runnable() {
@Override
public void run() {
PutDataMapRequest pdmr = PutDataMapRequest.create(WEAR_MESSAGE_PATH);
pdmr.getDataMap().putString("message", text);
PutDataRequest dataRequest = pdmr.asPutDataRequest();
dataRequest.setUrgent();
PendingResult<DataApi.DataItemResult> result = Wearable.DataApi.putDataItem(mApiClient, dataRequest);
result.setResultCallback(new ResultCallback<DataApi.DataItemResult>() {
@Override
public void onResult(@NonNull DataApi.DataItemResult dataItemResult) {
if(dataItemResult.getStatus().isSuccess()){
Log.v("MESSAGE APP", "MESSAGE SENT");
}
}
});
runOnUiThread(new Runnable() {
@Override
public void run() {
mEditText.setText("");
}
});
}
}).start();
}
@Override
public void onConnected(Bundle bundle) {
sendMessage(START_ACTIVITY, "");
}
@Override
public void onConnectionSuspended(int i) {
}
}
、それはメッセージを送信し、私はそれをデバッグするとき、私はそれを見つけた見ることができます私の摩耗(ノード)とメッセージを送信します(コールバックは成功を返します)。
しかし、摩耗は何も受信しない: アクティビティコード:
public class MainActivity extends Activity
implements MessageApi.MessageListener, GoogleApiClient.ConnectionCallbacks {
private static final String WEAR_MESSAGE_PATH = "/message";
private GoogleApiClient mApiClient;
private ArrayAdapter<String> mAdapter;
private ListView mListView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView = (ListView) findViewById(R.id.list);
mAdapter = new ArrayAdapter<String>(this, R.layout.list_item);
mListView.setAdapter(mAdapter);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
initGoogleApiClient();
}
private void initGoogleApiClient() {
mApiClient = new GoogleApiClient.Builder(this)
.addApi(Wearable.API)
.addConnectionCallbacks(this)
.build();
if(mApiClient != null && !(mApiClient.isConnected() || mApiClient.isConnecting()))
mApiClient.connect();
}
@Override
protected void onResume() {
super.onResume();
if(mApiClient != null && !(mApiClient.isConnected() || mApiClient.isConnecting()))
mApiClient.connect();
}
@Override
protected void onStart() {
super.onStart();
}
@Override
public void onDataChanged(DataEventBuffer dataEventBuffer) {
Log.v("WEAR MESSAGE", "Data changed");
for (DataEvent event : dataEventBuffer) {
if (event.getType() == DataEvent.TYPE_CHANGED) {
// DataItem changed
DataItem item = event.getDataItem();
if (item.getUri().getPath().compareTo(WEAR_MESSAGE_PATH) == 0) {
DataMap dataMap = DataMapItem.fromDataItem(item).getDataMap();
final String msg = dataMap.getString("message");
runOnUiThread(new Runnable() {
@Override
public void run() {
mAdapter.add(msg);
mAdapter.notifyDataSetChanged();
}
});
}
} else if (event.getType() == DataEvent.TYPE_DELETED) {
// DataItem deleted
}
}
}
@Override
public void onConnected(Bundle bundle) {
Wearable.DataApi.addListener(mApiClient, this);
startService(new Intent(this, WearMessageListenerService.class));
}
@Override
protected void onStop() {
if (mApiClient != null) {
Wearable.DataApi.removeListener(mApiClient, this);
if (mApiClient.isConnected()) {
mApiClient.disconnect();
}
}
super.onStop();
}
@Override
protected void onDestroy() {
if(mApiClient != null)
mApiClient.unregisterConnectionCallbacks(this);
super.onDestroy();
}
@Override
public void onConnectionSuspended(int i) {
Log.d("MESSAGE APP", "Connection suspended");
}
}
とマニフェスト(私は問題はここから来ていると思います):私は=」パスで試してみた
<uses-feature android:name="android.hardware.type.watch" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@android:style/Theme.DeviceDefault">
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
<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>
<intent-filter>
<action android:name="com.google.android.gms.wearable.DATA_CHANGED" />
<action android:name="com.google.android.gms.wearable.DATA_CHANGED" />
<data android:scheme="wear" android:host="*"
android:pathPattern=".*" />
</intent-filter>
</activity>
</application>
</manifest>
を/ message "のいずれかであり、動作しません。
その仕事
UPDATE作り方任意のアイデア:メッセージのAPIを使用してsuccesfullの応答メッセージは、実際に私がDataApiを使用するeveryhingを変更し、摩耗に達したという意味ではありませんことを見た後 を。 (私は上記のコードを変更しました)。
私は何かを試しましたが、私は何かを試しました。私は電話アクティビティにDataApiリスナーを置き、それが何か間違っているかどうかを判断するのに役立ちます。電話のアクティビティではデータチェンジが表示されますが、摩耗は表示されません。 これは実際にハードウェアを正しくセットアップしなかったと思います。
1.「pathPattern」を削除2.サービスを自分で起動する必要はなく、ライフサイクルはAndroid Wearによって管理されます –
はいテスト用にこの行を追加しました申し訳ありませんが、コードにはありません。 pathPatternを削除しても問題ありません。 –