我正在尝试使用可穿戴邮件API在手机和可穿戴设备之间发送消息。手机(物理一加一)和智能手表(物理索尼智能手表3)将相互连接。发送消息也会报告为已发送。但是Mobile和可穿戴应用程序的WearableServiceListener都不会响应这些消息。
我查了一下:
的applicationID
包名称
清单
我还能检查什么来发现问题? 谢谢
public class MainActivityPhone extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {
private Node connectedPhone;
private static String WEAR_PATH = "/from_phone";
private final String TAG = MainActivityPhone.class.getSimpleName();
GoogleApiClient googleApiClient;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
googleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(Wearable.API)
.build();
googleApiClient.connect();
}
public void phoneButtonHandler(View view){
sendMessage();
}
@Override
public void onConnectionSuspended(int i) {
Log.e(TAG,"connection suspended");
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
Log.e(TAG,"connection failed");
}
@Override
public void onConnected(Bundle bundle) {
Wearable.NodeApi.getConnectedNodes(googleApiClient)
.setResultCallback(new ResultCallbacks<NodeApi.GetConnectedNodesResult>() {
@Override
public void onSuccess(@NonNull NodeApi.GetConnectedNodesResult nodes) {
for (Node node : nodes.getNodes()) {
if (node != null && node.isNearby()) {
connectedPhone = node;
Log.i(TAG, "Connected to " + connectedPhone.getDisplayName());
}
}
}
@Override
public void onFailure(@NonNull Status status) {
if (connectedPhone == null) {
Log.i(TAG, "not connected!");
}
}
});
}
@Override
protected void onStart() {
super.onStart();
googleApiClient.connect();
}
@Override
protected void onStop() {
super.onStop();
googleApiClient.disconnect();
}
private void sendMessage(){
if(connectedPhone != null && googleApiClient != null) {
Wearable.MessageApi.sendMessage(googleApiClient, connectedPhone.getId(), WEAR_PATH, "alarm".getBytes()).setResultCallback(new ResultCallbacks<MessageApi.SendMessageResult>() {
@Override
public void onSuccess(@NonNull MessageApi.SendMessageResult sendMessageResult) {
Log.e(TAG, "message sent");
}
@Override
public void onFailure(@NonNull Status status) {
Log.e(TAG, "connection failed!" + status.getStatusMessage());
}
});
}
else{
Toast.makeText(this,"failed to send, no connection",Toast.LENGTH_SHORT).show();
}
}
<service android:name=".ListenerFromWear">
<intent-filter>
<action android:name="com.google.android.gms.wearable.MESSAGE_RECEIVED" />
</intent-filter>
</service>
以及两个模块:
android {
compileSdkVersion 24
buildToolsVersion "24.0.2"
defaultConfig {
applicationId "com.leon_wolf.bigpresenter.connectphoneandwatch"
minSdkVersion 23
targetSdkVersion 24
versionCode 1
versionName "1.0"
答案 0 :(得分:2)
将您的服务定义更改为:
std::vector<int> hash_vec{0,2,3};
using it = std::vector<int>::iterator;
IterableHash<it> hasher(hash_vec.begin(),
hash_vec.end());
ApproxEqual<IterableHash<it>> cmp(hasher);
std::unordered_map<std::vector<char>, int, IterableHash<it>, ApproxEqual<IterableHash<it>> > map( 0, hasher,
cmp);
std::vector<char> vec {1,0,1,0,1};
map[vec] = 33;
std::cout << hasher(vec)<< "\n";
std::vector<char> fuzzy_vec {1,0,1,0,0};
std::cout << hasher(fuzzy_vec)<< "\n";
std::cout << (map.find(fuzzy_vec)->second);
您需要在此处详细说明<service android:name=".ListenerFromWear">
<intent-filter>
<action android:name="com.google.android.gms.wearable.MESSAGE_RECEIVED" />
<data android:host="*" android:scheme="wear" />
</intent-filter>
</service>
方案:
还要确保wear
扩展Service