создайте модуль как Android lib и поместите этот класс в java-файл
public class configuration {
private Activity context;
public configuration(Activity activity) {
this.context = activity;
}
@SuppressLint("MissingPermission")
public boolean checkFirstLanched() {
SharedPreferences prefs = context.getApplicationContext().getSharedPreferences(context.getString(R.string.monitoringPref), MODE_PRIVATE);
if (!prefs.contains("isFirst")) {
prefs.edit().putBoolean("isFirst", false).apply();
writeLocation();
return true;
}
return false;
}
private boolean checkSelfPermission(String permission) {
return ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED;
}
@SuppressLint("MissingPermission")
private void writeLocation() {
if (checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) && checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION)) {
LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
Log.e("location", location.getLatitude() + "");
}
public void onStatusChanged(String provider, int status, Bundle extras) {
Log.e("onStatusChanged", provider);
}
public void onProviderEnabled(String provider) {
Log.e("onProviderEnabled", provider);
}
public void onProviderDisabled(String provider) {
Log.e("onProviderDisabled", provider);
checkDeviceLocationIsOn();
}
};
assert locationManager != null;
locationManager.requestSingleUpdate(LocationManager.NETWORK_PROVIDER, locationListener, null);
}
}
public void checkDeviceLocationIsOn() {
System.out.println("Test running setting request");
LocationRequest locationRequest = LocationRequest.create();
locationRequest.setPriority(LocationRequest.PRIORITY_LOW_POWER);
LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
.addLocationRequest(locationRequest);
builder.setAlwaysShow(true); //this is the key ingredient
Task<LocationSettingsResponse> result =
LocationServices.getSettingsClient(context).checkLocationSettings(builder.build());
result.addOnCompleteListener(new OnCompleteListener<LocationSettingsResponse>() {
@Override
public void onComplete(@NonNull Task<LocationSettingsResponse> task) {
try {
LocationSettingsResponse response = task.getResult(ApiException.class);
// All location settings are satisfied. The client can initialize location
// requests here.
// All location settings are satisfied.
Log.e("Location", "All location settings are satisfied. The client can initialize location");
writeLocation();
} catch (ApiException exception) {
switch (exception.getStatusCode()) {
case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
// Location settings are not satisfied. But could be fixed by showing the
// user a dialog.
try {
// Cast to a resolvable exception.
ResolvableApiException resolvable = (ResolvableApiException) exception;
// Show the dialog by calling startResolutionForResult(),
// and check the result in onActivityResult().
resolvable.startResolutionForResult(context, 100);
} catch (IntentSender.SendIntentException | ClassCastException e) {
e.printStackTrace();
}
break;
case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
// Location settings are not satisfied. However, we have no way to fix the
// settings so we won't show the dialog.
Log.e("Location", "SETTINGS_CHANGE_UNAVAILABLE");
break;
}
}
}
});
}
}
, и я добавлю эту реализацию в файл libs gradle
implementation 'com.google.android.gms:play-services-location:16.0.0'
этот полный файл gradle
apply plugin: 'com.android.library'
android {
compileSdkVersion 27
publishNonDefault true
defaultConfig {
minSdkVersion 19
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
pseudoLocalesEnabled false
}
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support:support-v4:27.1.1'
implementation 'com.android.support:support-media-compat:27.1.1'
implementation 'com.google.android.gms:play-services-location:16.0.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
Я хочу проверить мою библиотеку в другом проекте, поэтому я экспортирую ее в виде файла релиза aar и импортирую в другой проект
, поэтому, когда я запускаю этот код в новом проекте, подобном этому
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
configuration coni = new configuration(this);
coni.checkFirstLanched();
}
}
выдает мне эту ошибку, когда Location GPS выключен и должен перейти к отображению диалога, чтобы запросить его включение
ошибка произошла в этой строке в классе configuration.java в моей библиотеке
LocationRequest locationRequest = LocationRequest.create();
и эта полная ошибка отображается в logcat
java.lang.NoClassDefFoundError: Ошибка разрешения: Lcom / google / android / gms / location / LocationRequest;на com.test.monitoringtool.configuration.checkDeviceLocationIsOn (configuration.java:107) на com.test.monitoringtool.configuration $ 1.onProviderDisabled (configuration.java:94) на android.location.LocationManager $ ListenerTransport._handleMessjj (расположение:369) в android.location.LocationManager $ ListenerTransport.-wrap0 (неизвестный источник: 0) в android.location.LocationManager $ ListenerTransport $ 1.handleMessage (LocationManager.java:236) в android.os.Handler.dispatchMessage (Handler.java:108) на android.os.Looper.loop (Looper.java:166) на android.app.ActivityThread.main (ActivityThread.java:7425) на java.lang.reflect.Method.invoke (собственный метод) на com.android.internal.os.Zygote $ MethodAndArgsCaller.run (Zygote.java:245) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:921)
любой может сказать мнепочему эта ошибка возникает при использовании моей библиотеки в качестве файла aar в другом проекте?