2017-06-14 56 views
0

好了,所以我在AndroidManifest.xml文件,我正在尝试设置我的permissions这样,当应用程序启动时,系统会要求用户允许Location + Storage权限。试图提示用户设置应用程序的启动权限中AndroidManifest

我正在关闭BluetoothLeGatt的例子,我用uses-permission-sdk-23标签来做到这一点。

供参考,这是我的代码:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.android.bluetoothlegatt" 
    android:versionCode="1" 
    android:versionName="1.0"> 

    <!-- Min/target SDK versions (<uses-sdk>) managed by build.gradle --> 

    <!-- Declare this required feature if you want to make the app available to BLE-capable 
    devices only. If you want to make your app available to devices that don't support BLE, 
    you should omit this in the manifest. Instead, determine BLE capability by using 
    PackageManager.hasSystemFeature(FEATURE_BLUETOOTH_LE) --> 
    <uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/> 

    <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.WRITE_EXTERNAL_STORAGE" /> 

    <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH"/> 
    <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_ADMIN"/> 
    <uses-permission-sdk-23 android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
    <uses-permission-sdk-23 android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

    <application android:label="@string/app_name" 
     android:icon="@drawable/ic_launcher" 
     android:theme="@android:style/Theme.Holo.Light"> 
     <activity android:name=".DeviceScanActivity" 
      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=".DeviceControlActivity"/> 
     <service android:name=".BluetoothLeService" android:enabled="true"/> 
    </application> 

</manifest> 

回答

1

试试这个

第1步: - 添加要在manifiest文件中像这样

android.Manifest.permission.ACCESS_FINE_LOCATION, 
android.Manifest.permission.ACCESS_COARSE_LOCATION, 

第2步许可:问这样的运行时权限

String permission = android.Manifest.permission.ACCESS_FINE_LOCATION; 
     if (ActivityCompat.checkSelfPermission(SearchCityClass.this, permission) 
       != PackageManager.PERMISSION_GRANTED && ActivityCompat. 
       checkSelfPermission(SearchCityClass.this, android.Manifest.permission.ACCESS_COARSE_LOCATION) 
       != PackageManager.PERMISSION_GRANTED) { 
      ActivityCompat.requestPermissions(SearchCityClass.this, new String[] 
        {permission}, PERMISSION_GPS_CODE); 

     } 

步骤3:这样

@Override 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, 
            @NonNull int[] grantResults) { 
super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
if (requestCode == PERMISSION_GPS_CODE) { 
    if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 


     Toast.makeText(this, location_permission_granted_msg, Toast.LENGTH_SHORT).show(); 

    } else { 

     Toast.makeText(this, location_permission_not_granted_msg, Toast.LENGTH_SHORT).show(); 
    } 
} 

手柄许可结果}

+0

我在哪里把步骤2的代码? 我在想onCreate(),但我想验证? – Nazoog

+0

是的,你可以在创建方法前请求权限。步骤2 –

+0

@Nazoog在任何查询的情况下询问我 –

1

使用的许可机器人:名称= “android.permission.ACCESS_FINE_LOCATION”/>

在MainActivity加入以下内容

if (Build.VERSION.SDK_INT < 23) { 

    //We already have permission. Write your function call over hear 

} else { 

    if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 

     // Here we are asking for permission 

     ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1); 


    } else { 

//If the app is running for second time, then we already have 
permission. You can write your function here, if we already have 
permission.// 



    } 

} 

做同样的内存存储..

+0

你不需要一个特殊的代码来处理低于23的权限。它会自动返回true检查权限 –

+0

我试着将该代码复制到我的onCreate中,但是ContextCompat,PackageManager和ActivityCompat都显示为红色,就好像它们不能被识别一样 有什么我需要确保我包含在顶部我的.java文件? – Nazoog

相关问题