#android #android-studio #android-wear-data-api #android-wear-2.0
Вопрос:
Я добавляю новый модуль (wear) в свой проект, затем я использовал код моего предыдущего проекта для отправки данных с wear на телефон.
Я делаю этот класс в основном режиме
Отправить сообщение
static class SendMessage extends Thread {
String path;
String message;
Context context;
SendMessage(String p, String m, Context c) {
path = p;
message = m;
context = c;
}
public void run() {
Task<List<Node>> nodeListTask = Wearable.getNodeClient(context).getConnectedNodes();
try {
List<Node> nodes = Tasks.await(nodeListTask);
for (Node node : nodes) {
Task<Integer> sendMessageTask = Wearable.getMessageClient(context).sendMessage(node.getId(), path, message.getBytes());
try {
Integer result = Tasks.await(sendMessageTask);
} catch (ExecutionException | InterruptedException exception) {
}
}
} catch (ExecutionException | InterruptedException exception) {
}
}
}
и я использовал этот код для отправки данных, и я вызывал его много раз
, но onMessageReceived
метод никогда не вызывается.
new SendMessage("/my_path", "hi" ,getApplicationContext()).start();
В приложении для моего телефона
Я сделал новую услугу под названием MessageService
.
Служба сообщений
public class MessageService extends WearableListenerService {
@Override
public void onMessageReceived(MessageEvent messageEvent) {
if (messageEvent.getPath().equals("/my_path")) {
final String message = new String(messageEvent.getData());
Intent messageIntent = new Intent();
messageIntent.setAction(Intent.ACTION_SEND);
messageIntent.putExtra("message", message);
LocalBroadcastManager.getInstance(this).sendBroadcast(messageIntent);
} else {
super.onMessageReceived(messageEvent);
}
}
}
MainActivity
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Register to receive local broadcasts, which we'll be creating in the next step//
IntentFilter messageFilter = new IntentFilter(Intent.ACTION_SEND);
Receiver messageReceiver = new Receiver();
LocalBroadcastManager.getInstance(this).registerReceiver(messageReceiver, messageFilter);
}
//Define a nested class that extends BroadcastReceiver//
public class Receiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String message = intent.getStringExtra("message");
Log.v("message",message);
}
}
App manifest
<service
android:name=".MessageService"
android:enabled="true"
android:exported="true" >
<intent-filter>
<action android:name="com.google.android.gms.wearable.MESSAGE_RECEIVED" />
<data android:scheme="wear" android:host="*" android:pathPrefix="/my_path" />
</intent-filter>
</service>