First, sorry for my bad English, I'm Spanish (And new to android developing). I am developing a simple Bluetooth file sender, I am basing on BluetoothChat android example step by step.
Now I have a bluetooth activate request to the user, and select yes or no option application crashes.
I have the permissions declared in the Manifest.
The thing is, if user select yes to activate bluetooth, bluetooth actually activates but app still crashes after that.
I don't know if ACRA is in conflict with this, I'm using it because mi device is huawei u8650 and I don't find usb drivers to run app directly in the device from eclipse, so I move the .apk file every time to SD card.
Here is the manifest:
<?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>
and here is the main ( and only ) activity:
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();
}
}
}
}
I have read answers in Stackoverflow recently and this is my first question. I would appreciate any answers. Also tips on improve my developing. Thanks in advance!
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)
If it helps. When installing the app it says the three permissions, internet, bluetooth and bluetooth_admin, and it runs BluetoothAdapter.getDefaultAdapter(); without problems, even it runs the intent for bluetooth request, but it is when the onActivityResult comes into play when the app crashes it's like the app have lost the bluetooth permissions but thats is strange.
If you want your app to initiate device discovery or manipulate Bluetooth settings, you must declare the BLUETOOTH_ADMIN permission. Most apps need this permission solely for the ability to discover local Bluetooth devices.
Your app needs this permission because a Bluetooth scan can be used to gather information about the location of the user. This information may come from the user's own devices, as well as Bluetooth beacons in use at locations such as shops and transit facilities.”
you need both
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
and
<permission android:name="android.permission.BLUETOOTH" android:label="BLUETOOTH" />
<permission android:name="android.permission.BLUETOOTH_ADMIN" />
declarations in the AndroidManifest.xml
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With