当前位置: 首页 > 知识库问答 >
问题:

ACCESS_COARSE_LOCATION在Android 6上不工作[重复]

杨征
2023-03-14

我遵循官方的例子来编写这个程序

public class BluetoothActivity extends AppCompatActivity {
    private static final long SCANNING_TIMEOUT = 5000; /* 5 seconds */
    private static final int ENABLE_BT_REQUEST_ID = 1;
    private BleWrapper mBleWrapper = null;
    private boolean mScanning = false;
    private Handler mHandler = new Handler();
    private BluetoothAdapter mBluetoothAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_bluetooth);
        if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
            Toast.makeText(this, "no ble", Toast.LENGTH_SHORT).show();
            finish();
        }
        final BluetoothManager bluetoothManager =
                (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
        mBluetoothAdapter = bluetoothManager.getAdapter();
        if (mBluetoothAdapter == null || !mBluetoothAdapter.isEnabled()) {
            Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivityForResult(enableBtIntent, 1);
        }
        scanLeDevice(true);


    }
    private BluetoothAdapter.LeScanCallback mLeScanCallback =
            new BluetoothAdapter.LeScanCallback() {
                @Override
                public void onLeScan(final BluetoothDevice device, int rssi,
                                     byte[] scanRecord) {
                    Log.v("ble",device.getName());
                }
            };
    // Stops scanning after 10 seconds.
    private static final long SCAN_PERIOD = 3000;
    private void scanLeDevice(final boolean enable) {
        if (enable) {
            // Stops scanning after a pre-defined scan period.
            mHandler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    mScanning = false;
                    mBluetoothAdapter.stopLeScan(mLeScanCallback);
                }
            }, SCAN_PERIOD);

            mScanning = true;
            mBluetoothAdapter.startLeScan(mLeScanCallback);
        } else {
            mScanning = false;
            mBluetoothAdapter.stopLeScan(mLeScanCallback);
        }
    }
}
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
03-24 15:52:01.126 2223-2236/com.test W/Binder: Caught a RuntimeException from the binder stub implementation.
03-24 15:52:01.126 2223-2236/com.test W/Binder: java.lang.SecurityException: Need ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission to get scan results

共有1个答案

邓正谊
2023-03-14

Andorid M特性在运行时请求权限。这意味着当你的应用程序安装后,它还没有使用蓝牙的权限。用户必须手动授予该权限(每次安装一次)。

只需按照官方指南->在运行时请求权限

 类似资料:
  • 我试图解析的输入行看起来像 其中不同的数据字段由^A分隔。我试图获得各个数据字段(如8=fix.4.2、9=0126、35=0等)。问题是python有时将^a解释为单个字符(在vim中是ctrl-v、ctrl-a),有时将^a解释为带有两个字符的字符串'^a'。所以我试着做 但后来当我做的时候 我只是得到了原来的字符串,没有分裂。这是re.split的问题吗?

  • 有人能帮我解决这个问题吗?

  • 这是我的密码: 我已经安装了Python3(MacOSX),并将其与virtualenv一起使用。这段代码在2.7中运行良好,但在python3中不起作用。5.它总是给出

  • 我需要通过耳机播放一些音频。我使用AudioTrack在设备上播放一些声音。并且音频模式被设置为流_语音_呼叫。此外,在我的活动中,免提电话是通过以下方式关闭的: 这似乎在2.3设备上运行得很完美。但在2.1上,声音仍然从扬声器播放。 为了解决这个问题,我尝试将setMode()用作: 有了这个,2.1和2.3的声音就可以通过耳机播放了,但2.3的大多数时候根本不会播放。此外,我在一些地方读到se

  • 我刚刚在我的Android应用程序中安装了Firebase,以启用推送通知。我通过从Firebase控制台向所有运行该应用程序的设备发送推送通知来确认它正在工作。现在,我正在尝试获取FCM令牌(应用程序实例的唯一标识符),以便可以向特定设备发送消息。然而,当我在扩展FirebaseMessagingService的类中重写onNewToken()函数时,该方法不会被重写。根据文件,它应该可以工作。

  • 我有一段非常简单的Java代码,在那里我尝试从Java连接到我的Oracle DB。 在Windows下一切正常,但当我尝试在Ubuntu上运行时,我得到了一个错误。 我读了很多书,也试过很多解决方法。这是我的代码: 当我运行它时,我收到一个错误: 连接失败Java.sql.sqlRecoverable异常:IO错误:网络适配器无法在oracle.jdbc.driver.T4CConnection