Я провел последние пару дней, пытаясь сделать приложение, которое позволяет моему Samsung Galaxy S3 mini (Android 2.1.4) обнаружить «бесконечное» количество времени. Мой код выглядит в настоящее время следующим образом:Android: установить Bluetooth Discoverability Unbounded
package com.example.downtoone;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.content.LocalBroadcastManager;
import android.widget.Toast;
import com.example.downtoone.*;
import android.bluetooth.*;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
public class MainActivity extends Activity {
private BluetoothAdapter mBluetoothAdapter = null;
// Intent request codes
private static final int REQUEST_CONNECT_DEVICE = 1;
private static final int REQUEST_ENABLE_BT = 2;
private static final int REQUEST_ENABLE_DSC = 3;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (mBluetoothAdapter == null) {
Toast.makeText(this, "Bluetooth is not available", Toast.LENGTH_LONG).show();
finish();
return;
}
}
@Override
public void onStart() {
super.onStart();
if (!mBluetoothAdapter.isEnabled()) {
Intent MDisc = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
MDisc.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION,0);
startActivityForResult(MDisc, REQUEST_ENABLE_DSC);
}
}
@Override
public void onRestart(){
super.onRestart();
}
@Override
public void onResume() {
super.onResume();
}
@Override
public void onStop() {
super.onStop();
}
@Override
public void onDestroy() {
super.onDestroy();
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case REQUEST_CONNECT_DEVICE:
if (resultCode == Activity.RESULT_OK) {
}
break;
case REQUEST_ENABLE_BT:
if (resultCode == Activity.RESULT_CANCELED) {
Toast.makeText(this, "BLUETOOTH NEEDS TO BE ENABLED AND DISCOVERABLE", Toast.LENGTH_SHORT).show();
finish();
}
break;
case REQUEST_ENABLE_DSC:
if (resultCode == Activity.RESULT_CANCELED) {
Toast.makeText(this, "BLUETOOTH NEEDS TO BE ENABLED AND DISCOVERABLE", Toast.LENGTH_SHORT).show();
//finish();
}
break;
}
}
public void finishBTsetup(){
}
}
Несмотря на то, что я устанавливаю время «0», Discoverability работает только для 2minutes. Это довольно неприятно, так как я знаю, что устройство может справиться с возможностью обнаружения на неопределенное время! (Я мог вручную получить доступ к настройкам Bluetooth и установить Bluetooth-видимость на «Never Time Out»!)
Я искал ответы на все без ответа ... многие сообщения дают то, что (для относительного неквалифицированного программиста, такого как я) выглядят как тайные решения, которые слишком расплывчаты (*), запутывают (**) или совершенно неправильно. Было бы очень полезно получить простой ответ на этот вопрос (если он существует!)!
(*) Make Bluetooth on Android 2.1 discoverable indefinitely
(**) Extend Android Bluetooth Discoverability Android Application Bluetooth visibility duration (ответ раздел)
МАНИФЕСТ:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.downtoone"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="14" />
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
EDIT: Чтобы дать людям немного контекста, одна из целей этого приложения - попытаться быть ОТКРЫТОЙ для всех ближайших устройств Bluetooth, чтобы он мог напрямую разговаривать с ними. Поскольку большинство смартфонов можно обнаружить за короткий промежуток времени (обычно 2мин *), и только тогда, когда пользователь напрямую обеспечивает возможность обнаружения (= видимость), приложения, которые сканируют устройства и автоматически обмениваются данными, невозможно реализовать. (* Пользователь обычно может устанавливать видимость на «Нет времени», но для этого требуется, чтобы пользователь установил эту опцию непосредственно в настройках Bluetooth своего смартфона, что не очень изящное решение ...)
Это больше подходит для commnet –
Правда, но, похоже, мне не хватает репутации, чтобы комментировать :( –
Кажется, что установка длительности в 0 больше не работает с android 7.0 ..? – JanBo