Проблемы с разрешениями Bluetooth для Android

Во-первых, извините за мой плохой английский, я испанский (и новый для разработки Android). Я разрабатываю простой Bluetooth-отправитель файлов, я основываюсь на примере BluetoothChat android.

Теперь у меня есть запрос активации bluetooth для пользователя и выберите «Да» или «Нет».

У меня есть разрешения, объявленные в манифесте.

Дело в том, что если пользователь выбирает «да» для активации bluetooth, bluetooth на самом деле активируется, но приложение по-прежнему падает после этого.

Я не знаю, противоречит ли ACRA этому, я использую его, потому что mi устройство huawei u8650, и я не нахожу драйверы usb для запуска приложения непосредственно в устройстве из eclipse, поэтому я перемещаю файл .apk каждый Время до SD-карты.

Вот манифест:

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.BTSender" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="10" /> <uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:name="MyApplication"> <activity android:name=".BluetoothSenderActivity" 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> 

И здесь основная (и единственная) деятельность:

 package com.BTSender; import android.app.Activity; import android.bluetooth.BluetoothAdapter; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.widget.Toast; public class BluetoothSenderActivity extends Activity { private BluetoothAdapter BTAdapter; private String TAG = "BTSender"; private final int REQUEST_ENABLE_BT = 2; @Override public void onCreate(Bundle savedInstanceState) { // Creating window layout Log.v(TAG, "**Creating window**"); super.onCreate(savedInstanceState); setContentView(R.layout.main); Log.v(TAG, "**Window created"); // Get the bluetooth adapter BTAdapter = BluetoothAdapter.getDefaultAdapter(); // If null, that means bluetooth is not supported on the device if (BTAdapter == null) { Toast.makeText(this, R.string.BluetoothNotSupported, Toast.LENGTH_LONG).show(); finish(); return; } } @Override public void onStart() { // Check if Bluetooth is enabled, otherwise request user to enable it if (!BTAdapter.isEnabled()) { // IT NEEDS BLUETOOTH PERMISSION // Intent to enable bluetooth, it will show the enable bluetooth // dialog Intent enableIntent = new Intent( BluetoothAdapter.ACTION_REQUEST_ENABLE); // this is to get a result if bluetooth was enabled or not startActivityForResult(enableIntent, REQUEST_ENABLE_BT); // It will call onActivityResult method to determine if Bluetooth // was enabled or not } else { // Bluetooth is enabled } } // this will be called when in onStart method startActivityForResult is // executed public void onActivityResult(int requestCode, int resultCode, Intent data) { Log.v(TAG, "** onActivityResult **"); // determine from which activity switch (requestCode) { // if it was the request to enable Bluetooth: case REQUEST_ENABLE_BT: if (resultCode == Activity.RESULT_OK) { // Bluetooth is enabled now Log.v(TAG, "** Bluetooth is now enabled**"); } else { // user decided not to enable Bluetooth so exit application Log.v(TAG, "** Bluetooth is NOT enabled**"); Toast.makeText(this, R.string.BluetoothNotEnabled, Toast.LENGTH_LONG).show(); finish(); } } } } 

Я недавно прочитал ответы в Stackoverflow, и это мой первый вопрос. Буду признателен за любые ответы. Также советы по улучшению моего развития. Заранее спасибо!

 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.BTSender/com.BTSender.BluetoothSenderActivity}: java.lang.SecurityException: Need BLUETOOTH permission: Neither user 10076 nor current process has android.permission.BLUETOOTH. at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1654) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1670) at android.app.ActivityThread.access$1500(ActivityThread.java:117) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:123) at android.app.ActivityThread.main(ActivityThread.java:3695) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:507) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.SecurityException: Need BLUETOOTH permission: Neither user 10076 nor current process has android.permission.BLUETOOTH. at android.os.Parcel.readException(Parcel.java:1322) at android.os.Parcel.readException(Parcel.java:1276) at android.bluetooth.IBluetooth$Stub$Proxy.isEnabled(IBluetooth.java:496) at android.bluetooth.BluetoothAdapter.isEnabled(BluetoothAdapter.java:351) at com.BTSender.BluetoothSenderActivity.onStart(BluetoothSenderActivity.java:51) at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1129) at android.app.Activity.performStart(Activity.java:3791) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1627) ... 11 more java.lang.SecurityException: Need BLUETOOTH permission: Neither user 10076 nor current process has android.permission.BLUETOOTH. at android.os.Parcel.readException(Parcel.java:1322) at android.os.Parcel.readException(Parcel.java:1276) at android.bluetooth.IBluetooth$Stub$Proxy.isEnabled(IBluetooth.java:496) at android.bluetooth.BluetoothAdapter.isEnabled(BluetoothAdapter.java:351) at com.BTSender.BluetoothSenderActivity.onStart(BluetoothSenderActivity.java:51) at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1129) at android.app.Activity.performStart(Activity.java:3791) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1627) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1670) at android.app.ActivityThread.access$1500(ActivityThread.java:117) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:123) at android.app.ActivityThread.main(ActivityThread.java:3695) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:507) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) at dalvik.system.NativeStart.main(Native Method) 

Если это поможет. При установке приложения он говорит три разрешения, интернет, bluetooth и bluetooth_admin, и он запускает BluetoothAdapter.getDefaultAdapter (); Без проблем, даже он запускает намерение для запроса Bluetooth, но именно когда onActivityResult вступает в игру, когда приложение падает, это похоже на то, что приложение потеряло разрешения Bluetooth, но это странно.

Вам нужны оба

  <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> 

а также

 <permission android:name="android.permission.BLUETOOTH" android:label="BLUETOOTH" /> <permission android:name="android.permission.BLUETOOTH_ADMIN" /> 

Объявления в AndroidManifest.xml

Хорошо, я нашел проблему, я не знаю, почему, но ACRA давала неправильное сообщение, потому что говорило, что у приложения не было разрешений на Bluetooth, и у приложения были их.

Я создаю новый проект и копирую файлы, тогда ACRA сказал, что в методе onStart у меня не было super.onStart ();

Я добавил его и исправил проблему !.