ЦЕЛЬ: создать и запустить приложение, которое я успешно протестировал на Android 4.2.2 (JellyBean, API-уровень 17) на Android 7.0 (Nougat, API-уровень 24).
ПРОБЛЕМА: при запуске отладки или при запуске приложения появляется сообщение «приложение останавливается».Я не совсем понял, в чем проблема (также, если мне кажется, что проблема связана с обработкой разрешений).То, что я нашел ниже:
отладка
Method threw 'java.lang.NullPointerException' exception. Cannot evaluate android.os.Bundle.toString()
logcat
09-21 09:56:32.793 15606-15606/com.example.rage.lamapp E/art: The String#value field is not present on Android versions >= 6.0
MapsActivity (не полный код, чтобы сохранить чистоту)
public class MapsActivity extends AppCompatActivity implements OnMapReadyCallback {
public static GoogleMap mMap;
boolean mRequestingLocationUpdates = true;
private static int INTERVAL_DURATION = 5000; //5 sec
private static int SIGNAL_AREA_UPDATE_INTERVAL = 1;
public static int ACTIVE_TECHNOLOGY = -1;
private static int WIRELESS_TECHNOLOGY = -1; // 0 wifi, 1 umts, 2 lte
private final static int MY_PERMISSION_FINE_LOCATION = 101;
private final static int MY_PERMISSION_COARSE_LOCATION = 102;
private final static int REQUEST_CHECK_SETTINGS = 1024;
private final static int UPDATE_SEEK_BAR_MIN_VALUE = 5;
private FusedLocationProviderClient mFusedLocationClient;
private LocationCallback mLocationCallback;
private LocationRequest mLocationRequest;
private LocationManager locationManager;
private ConnectivityManager connectivityManager;
private NetworkInfo wifiCheck;
private TelephonyManager telephonyManager;
private WifiManager wifiManager;
private BroadcastReceiver wifiScanReceiver;
private List<ScanResult> results;
private int localMaxSignalStrength = 0;
private final static HashMap<Integer, String> RSSIcolorHmap = new HashMap();
private SignalAreaDatabase db;
private final LocationUpdate locationUpdate= new LocationUpdate(MapsActivity.this);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
db = SignalAreaDatabase.getDatabase(this);
mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
telephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);
// Check if location service is enabled
// checkGPSisEnabled();
// Set the toolbar
myToolbar.setTitle("RSSI Map");
myToolbar.setSubtitle("A Connectivity Map Builder");
setSupportActionBar(myToolbar);
// If location permission is granted initialize Map
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
mapSync();
} else {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, MY_PERMISSION_FINE_LOCATION);
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case MY_PERMISSION_FINE_LOCATION:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
mMap.setMyLocationEnabled(true);
}
} else {
Toast.makeText(getApplicationContext(), "This app requires location permission to be granted", Toast.LENGTH_SHORT).show();
finish();
}
break;
case MY_PERMISSION_COARSE_LOCATION:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
mMap.setMyLocationEnabled(true);
}
} else {
Toast.makeText(getApplicationContext(), "This app requires location permission to be granted", Toast.LENGTH_SHORT).show();
finish();
}
break;
}
}
/* other code */