与Android蓝牙权限问题 [英] Problems with android bluetooth permissions

查看:155
本文介绍了与Android蓝牙权限问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

首先,我的英语不好对不起,我西班牙语(和新开发Android)。我正在开发一个简单的蓝牙文件发送方,我立足于BluetoothChat Android示例一步​​一步来。

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.

我不知道,如果是ACRA冲突这一点,我使用它,因为MI设备是华为U8650,我没有发现USB驱动程序直接在Eclipse中的设备上运行的应用程序,所以我动。每次apk文件到SD卡。

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.

下面是明显的:

<?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();
            }
        }
    }
}

我最近在读答案#1,这是我的第一个问题。
我想AP preciate任何答案。还提示,对提高我的发展。在此先感谢!

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)

如果它帮助。当安装程序的时候说,三位权限,互联网,蓝牙和bluetooth_admin,它运行BluetoothAdapter.getDefaultAdapter();没有问题,即使它运行蓝牙请求的意图,但它是当的onActivityResult进场时,应用程序崩溃,就像应用程序已经失去蓝牙权限,但那是很奇怪。

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.

推荐答案

OK,我发现这个问题,我不知道为什么,但因为它说,应用早已不是蓝牙权限和程序ACRA是给一个错误信息做了他们。

OK, I have found the problem, I don't know why but ACRA was giving a wrong message because it said that app had not bluetooth permissions and the app do had them.

我创建了一个新的项目和复制文件,然后ACRA说,在OnStart方法我没有super.onStart();

I create a new project and copy files, then ACRA said that in onStart method I didn't have super.onStart();

我添加它,并解决了问题!

I added it and fixed the problem!.

这篇关于与Android蓝牙权限问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆