Я пытаюсь получить и маяк Estimote, который будет показан образцом приложения, но не может заставить его работать. Я посмотрел на эти два образца, и я не вижу, что я делаю иначе, чем с тех пор, как я скопировал большую часть кода.Невозможно получить маяк Estimote, чтобы его можно было увидеть с помощью altbeacon android
литературы я использую:
https://altbeacon.github.io/android-beacon-library/samples.html
Что мне ошибок является то, что я вижу эти странные журналы из моего приложения, который, кажется, как и Bluetooth не работает по какой-либо причине.
Я знаю, что UUID верен, потому что у меня установлено другое приложение, которое может видеть этот точно такой же маяк без проблем, но когда мне надоело создавать собственное приложение, я не могу заставить его работать. Bluetooth определенно включен, а Wi-Fi включен или выключен не имеет значения.
Интересно, может ли кто-нибудь выявить проблему, так как я пробовал код на HTC, Samsung Galaxy S6 и S5 (Lollipo и Marshmallow), и все они показывают одни и те же журналы.
журналы из моего приложения (что не видит маяк)
example.com.beacontest D/BeaconParser: Parsing beacon layout: m:2-3=beac,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25
example.com.beacontest D/BeaconParser: Parsing beacon layout: m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24
example.com.beacontest D/Activity: performCreate Call secproduct feature valuefalse
example.com.beacontest D/Activity: performCreate Call debug elastic valuetrue
example.com.beacontest W/BluetoothCrashResolver: Can't read macs from BluetoothCrashResolverState.txt
example.com.beacontest D/BluetoothAdapter: startLeScan(): null
example.com.beacontest D/BluetoothLeScanner: onClientRegistered() - status=133 clientIf=0
example.com.beacontest I/Timeline: Timeline: Activity_idle id: [email protected] time:7966418897
example.com.beacontest I/Timeline: Timeline: Activity_idle id: [email protected] time:7966418898
example.com.beacontest D/BluetoothAdapter: stopLeScan()
example.com.beacontest D/BluetoothLeScanner: could not find callback wrapper
example.com.beacontest D/BluetoothAdapter: startLeScan(): null
example.com.beacontest D/BluetoothLeScanner: onClientRegistered() - status=133 clientIf=0
example.com.beacontest D/BluetoothAdapter: stopLeScan()
Вот журналы из приложения, что * WORKS * (используя те же телефоны, радиомаяков и ЭСН). Похоже, мне нужно настроить для bluetooth в моем приложении, но я действительно не знаю, что это такое.
com.prodcode.dev D/BluetoothAdapter: STATE_ON
com.prodcode D/BluetoothAdapter: STATE_ON
com.prodcode D/BluetoothLeScanner: Stop Scan
com.prodcode D/BluetoothLeScanner: Start Scan
com.prodcode D/BluetoothAdapter: STATE_ON
com.prodcode D/BluetoothAdapter: STATE_ON
com.prodcode D/BluetoothAdapter: STATE_ON
com.prodcode D/BluetoothAdapter: STATE_ON
com.prodcode D/BluetoothLeScanner: onClientRegistered() - status=0 clientIf=13
спасибо.
код моего образца приложения:
public class MonitoringActivity extends AppCompatActivity implements BeaconConsumer {
protected static final String TAG = "ESTIMOTE_BEACON";
private BeaconManager beaconManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ranging);
org.altbeacon.beacon.BeaconManager altBeaconManager = org.altbeacon.beacon.BeaconManager.getInstanceForApplication(this);
altBeaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"));
altBeaconManager.setBackgroundScanPeriod(5000);
altBeaconManager.setBackgroundBetweenScanPeriod(25000);
beaconManager = BeaconManager.getInstanceForApplication(this);
BeaconManager.setAndroidLScanningDisabled(true);
altBeaconManager.bind(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
beaconManager.unbind(this);
}
public static final int BEACON_REGION_MAX = 10;
@Override
public void onBeaconServiceConnect() {
final String beaconID = getApplicationContext().getString(R.string.beaconUUID).toUpperCase();
final Region region = new Region("BEACON_TEST", Identifier.parse(beaconID), Identifier.fromInt(BEACON_REGION_MAX), null);
beaconManager.setMonitorNotifier(new MonitorNotifier() {
@Override
public void didEnterRegion(Region region) {
Log.d(TAG, "I just saw an beacon for the first time!");
try {
beaconManager.startRangingBeaconsInRegion(region);
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void didExitRegion(Region region) {
Log.d(TAG, "I no longer see an beacon");
try {
beaconManager.stopRangingBeaconsInRegion(region);
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void didDetermineStateForRegion(int state, Region region) {
Log.d(TAG, "I have just switched from seeing/not seeing beacons: " + state);
}
});
beaconManager.setRangeNotifier(new RangeNotifier() {
@Override
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
for (Beacon beacon : beacons) {
Log.d(TAG, "distance: " + beacon.getDistance() + " , " +
"id: " + beacon.getId1() + ", " +
"id: " + beacon.getId2() + ", " +
"id: " + beacon.getId3() + ", ");
}
}
});
try {
beaconManager.startMonitoringBeaconsInRegion(region);
} catch (RemoteException e) {
}
}
}
и вот мой манифест и Gradle:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
Gradle:
apply plugin: 'com.android.application'
repositories { jcenter() }
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
applicationId "example.com.beacontest"
minSdkVersion 18
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.3.0'
compile 'org.altbeacon:android-beacon-library:2.+'
compile 'com.android.support:design:23.3.0'
}
У приложения требуются разрешения? Перейдите в settings-> Apps-> Your app-> и проверьте, предоставлено ли разрешение. Предлагаю это, потому что вы говорите, что пытались на Marshmallow, но я не вижу никакого кода, связанного с разрешениями. – driftking9987
Я так считаю. Я добавил в манифест, и когда я попал в AppInfo, я вижу «доступ к настройкам Bluetooth и сопряжение с устройствами Bluetooth», – gmmo