android api23没有 requestpermissions,android - 调用需要API级别23(当前最小值为14):android.app.Activity#requestPermi...
时间: 2024-02-05 10:13:06 浏览: 31
对于API级别23及更高版本,确实需要使用`requestPermissions`方法来请求权限。如果您的应用程序的最小支持版本为14,则无法使用此方法。
您可以尝试使用兼容库来解决此问题。兼容库中提供了一个名为`ActivityCompat`的类,该类提供了一些方法来处理不同版本的Android系统之间的差异。例如,您可以使用`ActivityCompat.requestPermissions()`方法来请求权限,这将在不同版本的Android系统上正常工作。
您需要在项目的`build.gradle`中添加以下依赖项:
```
implementation 'com.android.support:support-v4:23.0.0'
```
然后,在您的代码中,您可以像这样请求权限:
```
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, requestCode);
```
其中,`this`是您的`Activity`,`Manifest.permission.READ_EXTERNAL_STORAGE`是您要请求的权限,`requestCode`是您自己定义的请求码。
相关问题
android.app.ForegroundServiceDidNotStartInTimeException: Context.startForegroundService() did not then call Ser
这个异常通常是由于启动前台服务超时引起的。在 Android O 及以上版本中,如果应用程序需要启动前台服务,则必须在服务启动后的 5 秒内调用 startForeground() 方法,否则将引发此异常。
为了解决这个问题,你可以尝试以下几种方法:
1. 将启动服务的代码移到后台线程中执行,以确保不会阻塞主线程。
2. 将服务的启动方式改为 startService(),并且在服务启动后立即调用 startForeground() 方法,以避免出现超时异常。需要注意的是,这种方式可能会导致应用程序受到 Android 系统的限制,使得应用程序无法长时间运行在后台。
3. 将应用程序的目标 API 级别设置为 Android O 及以上版本,并使用 startForegroundService() 方法启动前台服务,然后在 5 秒内调用 startForeground() 方法,以避免出现超时异常。
希望以上方法能够帮助你解决问题。
何如通过使用Android SDK提供的公共API来来实现 vendor调用libandroid.so的API
在 Android 系统中,vendor 能够通过 libandroid.so 中的公共 API 访问 Android 系统的一些功能。而在 Android 应用中,如果需要访问这些功能,可以通过使用 Android SDK 提供的公共 API 来实现。下面是一些实现步骤:
1. 在应用的 build.gradle 文件中添加以下依赖项:
```
dependencies {
implementation 'com.android.support:support-v4:28.0.0'
}
```
2. 在应用的代码中使用 System.loadLibrary() 加载 libandroid.so 库:
```
static {
System.loadLibrary("android");
}
```
3. 现在可以使用 Android SDK 提供的公共 API 来调用 libandroid.so 中的 API 了。例如,可以使用 LocationManager 类来获取设备的位置信息:
```
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
```
需要注意的是,vendor 中的 libandroid.so 中的 API 可能与 Android SDK 提供的公共 API 不完全相同,也可能存在一些限制。在使用时,需要仔细查看文档或者参考示例代码。