我在可穿戴应用中创建了一个片段,我需要使用Google API客户端的消息API向Handheld发送消息。谷歌未连接,它始终显示“未连接”日志。我在可穿戴方面添加了元数据。
请查看以下代码并帮助您从可穿戴应用程序连接到Google API客户端。
当我们想要从可穿戴设备发送消息到手持设备时,我们还需要另外一个查询来获得监听服务吗?
package com.andr.assestdatatransferdemo;
import android.app.Fragment;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.GoogleApiClient.OnConnectionFailedListener;
import com.google.android.gms.wearable.DataApi;
import com.google.android.gms.wearable.DataEventBuffer;
import com.google.android.gms.wearable.MessageApi;
import com.google.android.gms.wearable.MessageEvent;
import com.google.android.gms.wearable.Node;
import com.google.android.gms.wearable.NodeApi;
import com.google.android.gms.wearable.Wearable;
/**
* A simple {@link Fragment} subclass.
* Use the {@link BlankFragment#newInstance} factory method to
* create an instance of this fragment.
*/
public class BlankFragment extends Fragment implements GoogleApiClient.ConnectionCallbacks,
OnConnectionFailedListener, DataApi.DataListener, MessageApi.MessageListener,
NodeApi.NodeListener{
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";
// TODO: Rename and change types of parameters
private String mParam1;
private String mParam2;
private static final String START_ACTIVITY_PATH = "/start-activity";
private GoogleApiClient mGoogleApiClient;
public static final String IMAGE_PATH = "/image";
/**
* Use this factory method to create a new instance of
* this fragment using the provided parameters.
*
* @param param1 Parameter 1.
* @param param2 Parameter 2.
* @return A new instance of fragment BlankFragment.
*/
// TODO: Rename and change types and number of parameters
public static BlankFragment newInstance(String param1, String param2) {
BlankFragment fragment = new BlankFragment();
Bundle args = new Bundle();
args.putString(ARG_PARAM1, param1);
args.putString(ARG_PARAM2, param2);
fragment.setArguments(args);
return fragment;
}
public BlankFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
}
mGoogleApiClient = new GoogleApiClient.Builder(getActivity())
.addApi(Wearable.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
mGoogleApiClient.connect();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_blank, container, false);
if(mGoogleApiClient.isConnected()){
Log.d("TAG","Connected");
}
else{
Log.d("TAG","Not Connected");
}
return v;
}
@Override
public void onPeerConnected(Node node) {
}
@Override
public void onPeerDisconnected(Node node) {
}
@Override
public void onMessageReceived(MessageEvent messageEvent) {
}
@Override
public void onDataChanged(DataEventBuffer dataEventBuffer) {
}
@Override
public void onConnected(Bundle bundle) {
}
@Override
public void onConnectionSuspended(int i) {
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
}
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.andr.assestdatatransferdemo" >
<uses-feature android:name="android.hardware.type.watch" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/MyMaterialTheme" >
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<service
android:name=".DataLayerListenerService" >
<intent-filter>
<action android:name="com.google.android.gms.wearable.BIND_LISTENER" />
</intent-filter>
</service>
<uses-library
android:name="com.google.android.wearable"
android:required="false" />
<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>
</application>
</manifest>
任何人都可以帮我找到我正在做的错误,因为我总是得到onCreateView()方法没有连接的消息吗?
在此先感谢。
答案 0 :(得分:0)
为什么不使用你设置的onConnected?
@Override
public void onConnected(Bundle bundle) {
}
检索连接状态?可能在onCreateView()上,GoogleApiClient尚未连接。
您已经声明了WearableListenerService来处理所有传入的消息,因此您可能不需要实现所有其他侦听器
DataApi.DataListener,MessageApi.MessageListener
<service
android:name=".DataLayerListenerService" >
<intent-filter>
<action android:name="com.google.android.gms.wearable.BIND_LISTENER" />
</intent-filter>
</service>
要向手持设备或智能手表发送消息,请使用以下代码:
private void sendMessage(final String path, final String text) {
new Thread(new Runnable() {
@Override
public void run() {
NodeApi.GetConnectedNodesResult nodes = Wearable.NodeApi.getConnectedNodes(mApiClient).await();
for (Node node : nodes.getNodes()) {
Wearable.MessageApi.sendMessage(mApiClient, node.getId(), path, text.getBytes()).await();
}
}
}).start();
}
建议使用线程,因为操作可能需要一些时间来阻止UI。