Problemas con los permisos de Android bluetooth
En primer lugar, lo siento por mi mal Inglés, soy español (Y nuevo para Android desarrollo). Estoy desarrollando un expedidor simple del archivo de Bluetooth, estoy basando en el ejemplo del androide de BluetoothChat paso a paso.
Ahora tengo una solicitud de activación de bluetooth al usuario, y seleccione si o no la aplicación de opción se bloquea.
- Determinar mediante programación si la aplicación de Android tiene permiso al nivel del sistema
- Cualquier manera de evitar la instalación de falla de nivel de permiso de degradación en Android?
- Permisos del sistema Android a través de la raíz
- Permisos de Android M con notificaciones de parsemisión
- ¿Puede un Servicio de Android tener permisos múltiples?
Tengo los permisos declarados en el Manifiesto.
La cosa es, si el usuario selecciona sí para activar el bluetooth, el bluetooth realmente se activa pero la aplicación sigue fallando después de eso.
No sé si ACRA está en conflicto con esto, lo estoy usando porque mi dispositivo es huawei u8650 y no encuentro los conductores del usb para funcionar la aplicación directamente en el dispositivo de eclipse, así que muevo el archivo de .apk cada tiempo a la tarjeta SD.
Aquí está el manifiesto:
<?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>
y aquí está la actividad principal (y única):
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(); } } } }
He leído las respuestas en Stackoverflow recientemente y esta es mi primera pregunta. Agradecería cualquier respuesta. También consejos para mejorar mi desarrollo. ¡Gracias por adelantado!
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)
Si ayuda. Al instalar la aplicación dice los tres permisos, internet, bluetooth y bluetooth_admin, y ejecuta BluetoothAdapter.getDefaultAdapter (); sin problemas, incluso se ejecuta la intención de la solicitud bluetooth, pero es cuando el onActivityResult entra en juego cuando la aplicación se bloquea es como la aplicación han perdido los permisos de bluetooth, pero thats es extraño.
- 'Permiso denegado' al conectarse al socket unix abstracto
- StartBluetoothSco () lanza la excepción de seguridad (BROADCAST_STICKY) en ICS
- Uso de libusb en Android sin enraizamiento
- Android checkCallingOrSelfPermission no devuelve correctamente
- Android: ¿Cómo puedo "correctamente" crear un archivo de lectura pública?
- Determinación del nivel de permiso de Android
- "DIBUJAR SOBRE OTRA APLICACIÓN" es qué permiso en android
- ¿Hay alguna herramienta para proteger una aplicación de malware aún más que los permisos otorgados en Android?
necesitas ambos
<uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
y
<permission android:name="android.permission.BLUETOOTH" android:label="BLUETOOTH" /> <permission android:name="android.permission.BLUETOOTH_ADMIN" />
declaraciones en el AndroidManifest.xml
OK, he encontrado el problema, no sé por qué, pero ACRA estaba dando un mensaje equivocado porque dijo que la aplicación no tenía permisos de bluetooth y la aplicación no los tenía.
Creo un nuevo proyecto y copiar archivos, luego ACRA dijo que en el método onStart no tenía super.onStart ();
Lo agregué y arreglé el problema !.