2011-11-20 160 views
3

我創建了一個啓用藍牙並發現其他設備的應用程序。 清單中我有以下幾點:Android權限錯誤

<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. 

還有什麼我一定要添加到清單,這樣是否可行?

這是明顯的:

<?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> 
+0

發佈清單 – ethrbunny

+0

您可以發佈您的清單文件。 – user370305

+0

我發佈了清單 – Madrugada

回答

10

孩子嘗試移動許可<application>標籤之外。如下圖所示:

<?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

移動應用元素以外用途的許可標籤。使用權限是清單的子元素,而不是應用程序。請參閱完整結構here

2

移動它的應用程序之外:

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

here in docsuses-permission<manifest>

1

如果採用了android的mashmallow版本,那麼這個代碼添加:

這個錯誤的發生是由於安全現在在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; } }} 
+1

之前移動權限標籤BLUETOOTH和BLUETOOTH_ADMIN並未被Android視爲「危險權限」,因此不需要向用戶要求明確授權。請參閱[Android文檔](https://developer.android.com/guide/topics/security/permissions.html#normal-dangerous)。 – fast3r