Android 6.1和Smartwatch无法通信WearableListenerService

时间:2016-09-26 16:17:26

标签: android wear-os

我正在尝试使用可穿戴邮件API在手机和可穿戴设备之间发送消息。手机(物理一加一)和智能手表(物理索尼智能手表3)将相互连接。发送消息也会报告为已发送。但是Mobile和可穿戴应用程序的WearableServiceListener都不会响应这些消息。

我查了一下:

  1. 的applicationID

  2. 包名称

  3. 清单

  4. 我还能检查什么来发现问题? 谢谢

    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"
    

1 个答案:

答案 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> 方案:

https://developers.google.com/android/reference/com/google/android/gms/wearable/WearableListenerService

还要确保wear扩展Service