2016-10-22 23 views
3

私は自分のアプリにBluetoothを追加しましたが、次の問題が発生しています。私は、コードを実行すると:BluetoothAdapter.isEnabled.BLUETOOTHに必要なアクセス許可がありません

BluetoothAdapter bluetoothAdapter=BluetoothAdapter.getDefaultAdapter(); 
if (bluetoothAdapter == null) { 
    Toast.makeText(getApplicationContext(),"Device doesnt Support Bluetooth",Toast.LENGTH_SHORT).show(); 
} 

if(!bluetoothAdapter.isEnabled()) { 
    Intent enableAdapter = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 
    startActivityForResult(enableAdapter, 0); 
} 

エラーは次の行にある:

if(!bluetoothAdapter.isEnabled()) 

エラー:

Missing permissions required by BluetoothAdapter.isEnabled :android.permissions.BLUETOOTH

私は、Androidマニフェストファイルに次の権限を追加しました:

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

同じ問題を引き起こします。私が間違ったことを知っていますか?

+0

を持つこともいいです。 –

+0

Android 6.0以上でテストしていますか?実行時に許可を要求する必要があります。 'AndroidManifest.xml'でパーミッションを持つだけでは不十分です。ここをクリックしてください:https://developer.android.com/training/permissions/requesting.htmlここで簡単な例をご覧ください:http://stackoverflow.com/questions/33666071/android-marshmallow-request-permission?answertab=active# tab-top –

+0

@ th3pat3l具体的にどのようにブルートゥースの実行時のアクセス権を行うのですか教えてください。 – ComputerGeek101

答えて

0
  1. はあなたが唯一の<uses-permission>タグを必要とすることができます。これはあなたのカスタム許可ではないので、<permissions>タグは必要ありません。
  2. はたぶん、あなたはマニフェストで間違った要素で<uses-permission>タグを配置しているが、私はあなたのbluetoothAdapterがnullの場合、いずれかの第二IF nullポインタチェックに追加、またはRETURNを追加することができますので、あなたが
  3. を提供された情報との何かを言うことができませんあなたはActivty /フラグメントのコードを提供することができます
  4. IF最初に<uses-feature>タグ
+0

私は誤ってアプリケーションに自分の権限を入れましたタグ。 – ComputerGeek101

0

ボタンをクリックしてクリックすると、Bluetoothがオンになっている必要があります。ここでは、Android 6.0以上のための簡単な例を紹介します。

まず、あなたのActivity/Fragmentにこの変数を宣言:

public static final int PERMISSION_ASK = 1001; 

を、ブルートゥースを有効にするために起こっているのは、このボタンを言わせて。 setOnClickListener

アプリケーションがすでに必要な権限を持っているかどうか確認する
myButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
      if(isBluetoothPermissionGranted()) { 
       // app already has required permissions 
       // do some task here 
      } else { 
       // app does not have permission yet. 
       // ask for permissions 
       askForBluetoothPermissions(); 
      } 
     } else { 
      // Android version below 6.0, no need to check or ask for permission 
      // do some task here 
     } 
    } 
}); 

@RequiresApi(api = Build.VERSION_CODES.M) 
private boolean isBluetoothPermissionGranted() { 
    boolean granted = false; 
    int bluetoothGranted = checkSelfPermission(Manifest.permission.BLUETOOTH); 
    int bluetoothAdminGranted = checkSelfPermission(Manifest.permission.BLUETOOTH_ADMIN); 

    if(bluetoothGranted == PackageManager.PERMISSION_GRANTED && 
      bluetoothAdminGranted == PackageManager.PERMISSION_GRANTED) { 
     granted = true; 
    } 

    return granted; 
} 

必要な権限が与えられていない場合、ここにあなたがそれを頼む方法は次のとおりです。

@RequiresApi(api = Build.VERSION_CODES.M) 
private void askForBluetoothPermissions() { 
    String[] permissions = new String[] { 
      Manifest.permission.BLUETOOTH, 
      Manifest.permission.BLUETOOTH_ADMIN 
    }; 
    requestPermissions(permissions, PERMISSION_ASK); 
} 

そして最後にユーザーがあなたに許可を与えたかどうかを確認する方法は次のとおりです。

@Override 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
    switch (requestCode) { 
     case PERMISSION_ASK: 
      if(grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED) { 
       // all requested permissions were granted 
       // perform your task here 
      } else { 
       // permissions not granted 
       // DO NOT PERFORM THE TASK, it will fail/crash 
      } 
      break; 
     default: 
      super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
      break; 
    } 
} 

希望は、これはあなたが許可を使用しているので、

+0

Googleの新しいモットー:「2008年以降、1行のコードを100に変える」 –

+0

@KevinKrumwiede私はあなたが何を意味するかを見ていますが、この方法で見ると、少なくともオプションがあります。 iOSでは、非システムアプリケーションでWiFiやそのような簡単な機能を有効にすることさえできません。 Androidは非常に多くの異なるバージョンのさまざまなシステムで使用されています。もちろん、より多くの作業が必要になります。 iOSは1台の電話機用に構築されています。多くのオプションがありません –

+0

これをiOSではなくAndroidの以前のバージョンと比較しています。 Googleは、簡単なことをより困難にする方法を常に探しており、ランタイムのアクセス許可は間違いのために完全に呼び出されていませんでした。私は、Googleがその感覚になるまで、単に6+をターゲットにしていません。 –

関連する問題