Nhìn chằm chằm với Android 6.0, bạn có không đủ để đưa quyền vào tệp kê khai. Bạn phải yêu cầu người dùng rõ ràng về từng quyền được coi là "nguy hiểm". BluetoothDevice.ACTION_FOUND đòi hỏi BLUETOOTH và ACCESS_COARSE_LOCATION quyền http://developer.android.com/reference/android/bluetooth/BluetoothDevice.html#ACTION_FOUND
Các ACCESS_COARSE_LOCATION http://developer.android.com/reference/android/Manifest.permission.html#ACCESS_COARSE_LOCATION là một "nguy hiểm" cho phép và do đó bạn phải yêu cầu nó sử dụng requestPermission trước khi thực hiện khám phá thực tế.
public void doDiscovery() {
int hasPermission = ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION);
if (hasPermission == PackageManager.PERMISSION_GRANTED) {
continueDoDiscovery();
return;
}
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{
android.Manifest.permission.ACCESS_COARSE_LOCATION},
REQUEST_COARSE_LOCATION_PERMISSIONS);
}
đó trở đi bạn sẽ nhận được câu trả lời người dùng trên onRequestPermissionsResult
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case REQUEST_COARSE_LOCATION_PERMISSIONS: {
if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
continueDoDiscovery();
} else {
Toast.makeText(this,
getResources().getString(R.string.permission_failure),
Toast.LENGTH_LONG).show();
cancelOperation();
}
return;
}
}
}
Để làm việc với các phiên bản trước của Android bạn nên sử dụng các thư viện tương thích và làm cho các cuộc gọi sử dụng ActivityCompat
thiết bị nào bạn gặp sự cố này? Mối quan hệ nào? Tôi làm trên Nexus 5 –
Trên Nexus 5 – eldina