- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个应用程序,可以将手机上的本地音乐分享到其他设备。为了连接多个设备,我使用 Google 的附近 API。开始在两台设备上进行通告和发现后,onEndpointFound 会在两台设备上调用已找到的设备。要接受此连接,应用程序应显示一个 AlertDialog。这发生在 onConnectionInitiated 方法中。但由于某种原因,应用程序无法到达构建 AlertDialog 的部分。
有人知道如何解决这个问题吗?
这是代码:
package com.shuzo.musicshare;
import android.Manifest;
import android.content.Context;
import android.content.DialogInterface;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.util.Log;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;
import com.google.android.gms.nearby.Nearby;
import com.google.android.gms.nearby.connection.AdvertisingOptions;
import com.google.android.gms.nearby.connection.ConnectionInfo;
import com.google.android.gms.nearby.connection.ConnectionLifecycleCallback;
import com.google.android.gms.nearby.connection.ConnectionResolution;
import com.google.android.gms.nearby.connection.ConnectionsClient;
import com.google.android.gms.nearby.connection.ConnectionsStatusCodes;
import com.google.android.gms.nearby.connection.DiscoveredEndpointInfo;
import com.google.android.gms.nearby.connection.DiscoveryOptions;
import com.google.android.gms.nearby.connection.EndpointDiscoveryCallback;
import com.google.android.gms.nearby.connection.Payload;
import com.google.android.gms.nearby.connection.PayloadCallback;
import com.google.android.gms.nearby.connection.PayloadTransferUpdate;
import com.google.android.gms.nearby.connection.Strategy;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MusicShare";
private static final String[] REQUIRED_PERMISSIONS =
new String[] {
Manifest.permission.BLUETOOTH,
Manifest.permission.BLUETOOTH_ADMIN,
Manifest.permission.ACCESS_WIFI_STATE,
Manifest.permission.CHANGE_WIFI_STATE,
Manifest.permission.ACCESS_COARSE_LOCATION,
};
private static final int REQUEST_CODE_REQUIRED_PERMISSIONS = 1;
private static final Strategy STRATEGY = Strategy.P2P_STAR;
EditText usernameEdit;
Button connectButton;
private ConnectionsClient connectionsClient;
// Callbacks for receiving payloads
private final PayloadCallback payloadCallback =
new PayloadCallback() {
@Override
public void onPayloadReceived(String endpointId, Payload payload) {
}
@Override
public void onPayloadTransferUpdate(String endpointId, PayloadTransferUpdate update) {
}
};
// Callbacks for connections to devices
private final ConnectionLifecycleCallback connectionLifecycleCallback =
new ConnectionLifecycleCallback() {
@Override
public void onConnectionInitiated(final String endpointId, ConnectionInfo connectionInfo) {
Log.i(TAG, "onConnectionInitiated: accepting connection");
AlertDialog.Builder alertDialog = new AlertDialog.Builder(getApplicationContext());
alertDialog
.setTitle(R.string.accept_connection_title + " " + connectionInfo.getEndpointName())
.setMessage(R.string.confirm_codes + " " + connectionInfo.getAuthenticationToken())
.setPositiveButton(
R.string.accept_connection,
(DialogInterface dialog, int which) ->
connectionsClient.acceptConnection(endpointId, payloadCallback))
.setNegativeButton(
android.R.string.cancel,
(DialogInterface dialog, int which) ->
connectionsClient.rejectConnection(endpointId))
.setIcon(android.R.drawable.ic_dialog_alert)
.show();
}
@Override
public void onConnectionResult(String endpointId, ConnectionResolution result) {
switch (result.getStatus().getStatusCode()) {
case ConnectionsStatusCodes.STATUS_OK:
Log.i(TAG, "onConnectionResult: status ok");
Toast.makeText(getApplicationContext(), "Connected", Toast.LENGTH_SHORT).show();
break;
case ConnectionsStatusCodes.STATUS_CONNECTION_REJECTED:
Log.i(TAG, "onConnectionResult: connection rejected");
Toast.makeText(getApplicationContext(), "Connection rejected", Toast.LENGTH_SHORT).show();
break;
case ConnectionsStatusCodes.STATUS_ERROR:
Log.i(TAG, "onConnectionResult: error");
Toast.makeText(getApplicationContext(), "Connection error", Toast.LENGTH_SHORT).show();
break;
default:
// Unknown status code
}
}
@Override
public void onDisconnected(String endpointId) {
Log.i(TAG, "Device disconnected");
}
};
private final EndpointDiscoveryCallback endpointDiscoveryCallback =
new EndpointDiscoveryCallback() {
@Override
public void onEndpointFound(String endpointId, DiscoveredEndpointInfo info) {
Log.i(TAG, "onEndpointFound: endpoint found, connecting");
connectionsClient
.requestConnection(getUserNickname(), endpointId, connectionLifecycleCallback)
.addOnSuccessListener(
(Void unused) -> {
Log.i(TAG, "onEndpointFound: successful");
})
.addOnFailureListener(
(Exception e) -> {
Log.i(TAG, "onEndpointFound: failed");
});
}
@Override
public void onEndpointLost(String endpointId) {
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
connectionsClient = Nearby.getConnectionsClient(this);
connectButton = findViewById(R.id.connectButton);
connectButton.setOnClickListener(view -> {
startAdvertising();
startDiscovery();
connectButton.setEnabled(false);
});
}
@Override
protected void onStart() {
super.onStart();
if (!hasPermissions(this, REQUIRED_PERMISSIONS)) {
requestPermissions(REQUIRED_PERMISSIONS, REQUEST_CODE_REQUIRED_PERMISSIONS);
}
}
private static boolean hasPermissions(Context context, String... permissions) {
for (String permission : permissions) {
if (ContextCompat.checkSelfPermission(context, permission)
!= PackageManager.PERMISSION_GRANTED) {
return false;
}
}
return true;
}
private void startAdvertising() {
AdvertisingOptions advertisingOptions =
new AdvertisingOptions.Builder().setStrategy(STRATEGY).build();
connectionsClient
.startAdvertising(getUserNickname(), getPackageName(), connectionLifecycleCallback, advertisingOptions)
.addOnSuccessListener(
(Void unused) -> {
Toast.makeText(getApplicationContext(), R.string.advertising_success, Toast.LENGTH_SHORT).show();
})
.addOnFailureListener(
(Exception e) -> {
Toast.makeText(getApplicationContext(), R.string.advertising_fail, Toast.LENGTH_SHORT).show();
});
}
private void startDiscovery() {
DiscoveryOptions discoveryOptions =
new DiscoveryOptions.Builder().setStrategy(STRATEGY).build();
connectionsClient
.startDiscovery(getPackageName(), endpointDiscoveryCallback, discoveryOptions)
.addOnSuccessListener(
(Void unused) -> {
Toast.makeText(getApplicationContext(), R.string.discovery_success, Toast.LENGTH_SHORT).show();
})
.addOnFailureListener(
(Exception e) -> {
Toast.makeText(getApplicationContext(), R.string.discovery_failed, Toast.LENGTH_SHORT).show();
});
}
private String getUserNickname() {
usernameEdit = findViewById(R.id.usernameEdit);
return usernameEdit.getText().toString();
}
}
最佳答案
鉴于评论中的其他详细信息,这似乎是蓝牙经典问题。我查看了我们的记录,我们都有报告的设备,因此我们将尝试在我们这边重现。
您可以执行的一些步骤:1) 尝试重新启动设备并查看问题是否可以重现。2) 从两台设备收集日志 (adb logcat) 或错误报告 (adb bugreport) 并将其附加到本文中,或直接通过电子邮件发送给我(我的用户名}@google.com)。这些包含敏感数据,因此仅当您在两台设备上都有测试帐户时才发送它。如果您有个人帐户,则先过滤日志(adb logcat NearbyConnections:* NearbyMediums:* *:S)
免责声明:我从事“附近连接”工作
关于java - 无法通过 Google Nearby API 连接两个设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61328892/
我目前正在开发一款适用于 Android 和 iOS 的应用程序,该应用程序使用 Nearby Connections 将少量数据(如字符串、字符或整数)传送到其他设备。我最初是在查看附近的消息,但注
我正在尝试使用 googles Nearby Connections API 传输文件。在很大程度上,我可以让传输的所有组件正常工作,以便传输所有文件数据,但问题是文件数据随后存储在 Nearby 的
我在我的应用中使用了谷歌附近的消息。以前,我的应用程序能够在 Android 和 IOS 之间交换数据。但最近我无法在 Android 和 IOS 之间交换数据。我找不到任何关于此的文档。谁能给我解释
似乎当我们的应用程序在 iOS 上进入后台(用户单击“主页”)时,附近的服务停止工作(messageLostHandler 和/或 messageFoundHandler 在用户打开应用程序之前不会触
假设你有你的用户的经纬度,你想找到附近的......比方说餐馆,你如何查询你的关系数据库?对于诸如“半径 25 英里范围内的餐厅”之类的东西? 您是否会在一个长和纬度大于/小于用户 loc +/- 2
当我第一次运行我的应用程序时,在点击特定地点类型时,它会生成附近地点的每个类型,例如:在我指定的英里半径内的 atm、商场、食品、学校等。地点 Activity 代码: package www.une
我正在使用 Nearby Connections API。根据我的阅读,一个人不应该在同时连接到设备的同时进行发现,因为这会减少带宽并导致可能断开连接。 但是,我正在构建一个应用程序,其中每部手机都会
我在使用 Nearby API 时遇到了一些问题。当我在连接到 API 后尝试发送消息时,我收到以下状态消息: Nearby.Messages is not enabled for this app:
我在我的应用程序中使用附近的连接。我发现 2 部手机需要 10 多秒才能找到并相互连接。此外,我发现我可以让 2 部手机相互连接——让 3 部以上的手机全部相互连接是非常困难的。 建立连接后,性能非常
考虑以下简化情况: create table trans ( id integer not null , tm timestamp without time zone not null , val
我想使用我的 swift ios 应用程序使用 google nearby api(不是 iBeacon api)扫描信标 我看到谷歌开发者doc ,我从同一站点获取了 git 样本。 这是我的 co
有很多公共(public)场所会使用您的手机进行跟踪。您的移动设备用作标识符,例如:http://www.bbc.co.uk/news/technology-23665490 是否可以使用 Andro
我正在考虑使用 Google 的 Nearby API 来检测信标 (Eddystone)。目前唯一的方法似乎是调用 Nearby.Messages.subscribe() 描述 here . 问题是
有没有办法验证 Google Nearby API 是否已经获得授权? enableAutoManage() 方法自动执行所有操作,所以,它没有帮助,我想要仅当我已经获得许可时才使用 publish(
我正在 ios 7 中进行 Multipeer 连接,它运行良好。但我需要的是,当我按下搜索按钮时,它需要显示所有附近的 session ( 不是附近的设备 )。有没有可能解决方案。请帮忙!!! 最佳
我正在尝试使用 Nearby API 将来 self 的 Eddystone Beacon (micro:bit) 的 Beacon 消息发送到我的 Android 应用程序.我从文档中复制了所有代码
我正在构建一个应用程序来测试 Google Nearby Messages API。对于该测试,我使用的是 DISTANCE_TYPE_EARSHOT。 根据这个线程Nearby API's Stra
我有以下代码: OnFailureListener onFailureListener = new OnFailureListener() { @Override public void on
我正在使用 Google 的 Nearby 并尝试在不使用 BLE 或 Classic BT 的情况下(仅)使用 discoveryMediums Audio。原因是因为我希望发现发生在一个房间里,而
问题 是否可以通过手机设置授予 Nearby API 权限? 如果是,怎么做? 答案是否因设备 API 级别而异? 如果需要,请继续阅读以获取更多上下文 :) 一般背景 当在运行 API 级别 23
我是一名优秀的程序员,十分优秀!