我得到了这个错误 java.lang.AbstractMethodError: abstract method "void android.location.LocationListener.onProviderDisabled(java.lang.String)
java.lang.AbstractMethodError: abstract method "void android.location.LocationListener.onProviderDisabled(java.lang.String)
当我给 locationManager.requestLocationUpdates() 打电话的时候。我看到了另一个 post ,其中的答案是重写一些方法,即
locationManager.requestLocationUpdates()
@Override public void onProviderDisabled(@NonNull String provider) {}
但问题是,在我的项目中任何地方我都不能覆盖它们。
我简化了代码 以帮助读者,而不是两个类,我有一个
MainActivity:
public class MainActivity extends AppCompatActivity { LocationManager locationManager; LocationListener locationListener = location -> Toast.makeText(MainActivity.this,location.getLatitude()+" "+location.getLongitude(),Toast.LENGTH_LONG).show(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); findViewById(R.id.button).setOnClickListener(v -> showLoc()); findViewById(R.id.button2).setOnClickListener(v -> locationManager.removeUpdates(locationListener)); private void showLoc(){ if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED ) { ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 13); return; locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 2, locationListener); @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (requestCode == 13) { for (int i = 0; i < permissions.length; i++) { if (permissions[i].equals(Manifest.permission.ACCESS_FINE_LOCATION) && grantResults[i] == PackageManager.PERMISSION_GRANTED) { System.out.println("DEBUG Request Permissions "); showLoc(); }
异常将抛出在 locationManager.requestLocationUpdates 上,并与库版本有关。
locationManager.requestLocationUpdates
最后这是我的 build.gradle(app)
plugins { id 'com.android.application' android { compileSdkVersion 30 buildToolsVersion "30.0.2" defaultConfig { applicationId "com.example.app" minSdkVersion 25 targetSdkVersion 30 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 dependencies { implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'com.google.android.material:material:1.2.1' implementation 'androidx.constraintlayout:constraintlayout:2.0.4' testImplementation 'junit:junit:4.+' androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'