【问题标题】:Android permission error安卓权限错误
【发布时间】:2015-10-30 19:29:48
【问题描述】:

我创建了一个启用蓝牙并发现其他设备的应用程序。 在清单中,我有以下内容:

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

但是,在设备上存在这个异常:

11-20 08:08:47.766: E/AndroidRuntime(9380): FATAL EXCEPTION: main
11-20 08:08:47.766: E/AndroidRuntime(9380): java.lang.SecurityException: Need BLUETOOTH permission: Neither user 10111 nor current process has android.permission.BLUETOOTH.

我还必须向 Manifest 添加什么才能使其正常工作?

这是清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="cajun.meet"
  android:versionCode="1"
  android:versionName="1.0">
<uses-sdk android:minSdkVersion="8" />

<application android:icon="@drawable/icon" android:label="@string/app_name">

    <activity android:name=".CajunMeetActivity"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity android:name=".MyULCard"
              android:label="@string/app_name">
    </activity>

    <activity android:name=".MyULContacts"
              android:label="@string/app_name">
    </activity>

    <service android:name = ".BluetoothExchange" android:exported="true" android:enabled="true">
    </service>

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

</application>
</manifest>

【问题讨论】:

  • 你能发布你的清单文件吗?
  • 尝试将权限标签移到活动标签之前

标签: android manifest


【解决方案1】:

尝试将权限移到&lt;application&gt; 标记之外。如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="cajun.meet"
  android:versionCode="1"
  android:versionName="1.0">
<uses-sdk android:minSdkVersion="8" />

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

<application android:icon="@drawable/icon" android:label="@string/app_name">

    <activity android:name=".CajunMeetActivity"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity android:name=".MyULCard"
              android:label="@string/app_name">
    </activity>

    <activity android:name=".MyULContacts"
              android:label="@string/app_name">
    </activity>

    <service android:name = ".BluetoothExchange" android:exported="true" android:enabled="true">
    </service>

</application>
</manifest>

【讨论】:

    【解决方案2】:

    将 uses-permission 标签移到应用程序元素之外。使用权限是清单的子元素,而不是应用程序。查看完整结构here

    【讨论】:

      【解决方案3】:

      将其移出应用程序:

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

      看到here in docsuses-permission&lt;manifest&gt; 的孩子

      【讨论】:

        【解决方案4】:

        如果使用 mashmallow 版本的 android 则添加以下代码:

        由于现在在 api 23 (mashmallow) 版本中的安全性而发生此错误,android 改进了他们要求许可的安全性

        if (android.os.Build.VERSION.SDK_INT >= 23) {
                // only for gingerbread and newer versions
                String permission = Manifest.permission.READ_PHONE_STATE;
                if (checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) {
                    ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.READ_PHONE_STATE}, MY_PERMISSIONS_REQUEST_READ_CONTACTS);
                } else {
                    // Add your function here which open camera
                }
            } else {
                // Add your function here which open camera
            }
        

        然后添加这个方法onRequestPermissionsResult

            @Override
        public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
            switch (requestCode) {
                case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
                    // If request is cancelled, the result arrays are empty.
                    if (grantResults.length > 0
                            && grantResults[0] == PackageManager.PERMISSION_GRANTED{ } else { Toast.makeText(getApplication(), "Permission required",Toast.LENGTH_LONG).show(); } return; } }}
        

        【讨论】:

        • BLUETOOTH 和 BLUETOOTH_ADMIN 不被 Android 视为“危险权限”,因此无需向用户请求明确授权。见Android docs
        猜你喜欢
        • 2011-04-06
        • 2015-03-23
        • 2017-10-15
        • 2013-10-18
        • 1970-01-01
        • 1970-01-01
        • 2016-02-06
        • 2014-02-16
        • 2016-04-28
        相关资源
        最近更新 更多