如何解决在后台使用 GPS
在我正在开发的 GPS 应用程序中,即使应用程序不再处于前台,我也希望 GPS 继续向我提供其信息。
但是当我的应用程序在后台时,我感觉我不再收到它的信息。
我的智能手机是搭载 Android 10 的三星 A41。
不过,我认为我做了正确的事情。这是我所做的:
在“build.gradle(模块 GPSNav.app)文件中):
apply plugin: 'com.android.application'
android {
compileSdkVersion 29
buildToolsVersion "29.0.3"
defaultConfig {
applicationId "com.example.gpsnav"
minSdkVersion 23
targetSdkVersion 29
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
}
}
}
dependencies {
//noinspection GradleCompatible
implementation 'com.android.support:support-v4:24.2.1'
}
在“androidManifest.xml”文件中:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />"
在我的应用程序中,我有:
private static final int PERMISSION_REQUEST_GPS = 100;
...
if (ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS_BACKGROUND_LOCATION) != PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(Main.this,new String[]{
Manifest.permission.ACCESS_BACKGROUND_LOCATION,Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.ACCESS_FINE_LOCATION},PERMISSION_REQUEST_GPS);
return;
}
...
@Override
public void onRequestPermissionsResult(int requestCode,@NonNull String[] permissions,@NonNull int[] grantResults) {
if (requestCode == PERMISSION_REQUEST_GPS) {
if (grantResults[0] == PackageManager.PERMISSION_DENIED) { // Ferme l'application
Toast.makeText(Main.this,"Désolé !!! vous ne pouvez pas utiliser cette application sans permission",Toast.LENGTH_LONG).show();
finish();
}
}
}
显然这还不够。
应该怎么做?
解决方法
确实是涉及服务的方法使得即使应用程序不再处于前台也可以保持 GPS 处于活动状态。
我终于知道为什么它不起作用了。这与我在“NotificationCompat.Builder”中只有一个参数要给出的事实有关。
在查找有关通知的文档时,我发现有必要在“build.gradle”文件中包含此依赖项:
dependencies {
implementation "com.android.support:support-compat:28.0.0"
}
我没有。我用指示的那个替换了我拥有的那个,这一次我能够设置我想要的两个参数并且......我没有更多的错误。
今天下午,我带着我的应用程序去远足,我用“PlantNet”、“birdNET”中断了几次,最后一个应用程序也使用 GPS:我的应用程序没有操作和记录轨迹的问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。