Hello. I am now learning how to use Location when developing an App and I would like some help here.
(Following the android recipes book) I built an app using Androd Studio in which the java file is like this:
It is basically the same code of the book with a little change in the textView and build from scratch (that is another question I am going to ask- but let's forget about that now)
1) Anyway, First thing I notice : in the methods of manager (which is a LocationManager) they all get a red underline. When I check it with the mouse it says: "Call requires permission which might be rejected by the user: code should explicitly check to see if permission is available (with checkPermission) or explicitly handle a potential SecurityException".
I have inserted this in the manifiest
And as you see in the code, it asks for the user to activate GPS if is disabled so what is the problem here?
2) I tried to run this example in the AVD of android studio. It stopped immediately (could not see anything). The android monitor has a lot of messages I don't understand.
Then I activate genimotion and when running the app there, I could see the program in motion and successfully do what is does (which is very simple, just put the (simulated) GPS value on screen)
3) I am worried about the amount of messages on the Android Monitor and in the RUN screen. (in this one, there is a lot of messages in dark red for example:
which I don't understand. I wonder if there is something wrong
4) and lastly, I deactivated the (simulated)GPS in genimotion and still the activity shows the last value. it does not show me the message to activate even though that is explicitly in onResume(). I wonder what is wrong here
Any help greatly appreciated
(Following the android recipes book) I built an app using Androd Studio in which the java file is like this:
Java:
public class MyActivity extends AppCompatActivity {
LocationManager manager;
Location currentLocation;
TextView locationView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_activity);
locationView=(TextView)findViewById(R.id.locationView);
manager= (LocationManager)getSystemService(Context.LOCATION_SERVICE);
}
@Override
public void onResume() {
super.onResume();
if(!manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
//Ask the user to enable GPS
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Location Manager");
builder.setMessage("We would like to use your location, but GPS is currently disabled.\n"
+"Would you like to change these settings now?");
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//Launch settings, allowing user to make a change
Intent i = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(i);
}
});
builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//No location service, no Activity
finish();
}
});
builder.create().show();
}
//Get a cached location, if it exists
currentLocation = manager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
updateDisplay();
//Register for updates
int minTime = 5000;
float minDistance = 0;
manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, minTime, minDistance, listener);
}
private void updateDisplay() {
if(currentLocation == null) {
locationView.setText("Determining Your Location...");
} else {
locationView.setText(String.format("Your Location:\n%.2f, %.2f",
currentLocation.getLatitude(),
currentLocation.getLongitude()));
}
}
@Override
public void onPause() {
super.onPause();
manager.removeUpdates(listener);
}
//Handle Location callback events
private LocationListener listener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
currentLocation = location;
updateDisplay();
}
@Override
public void onProviderDisabled(String provider) { }
@Override
public void onProviderEnabled(String provider) { }
@Override
public void onStatusChanged(String provider, int status, Bundle extras) { }
};
}
It is basically the same code of the book with a little change in the textView and build from scratch (that is another question I am going to ask- but let's forget about that now)
1) Anyway, First thing I notice : in the methods of manager (which is a LocationManager) they all get a red underline. When I check it with the mouse it says: "Call requires permission which might be rejected by the user: code should explicitly check to see if permission is available (with checkPermission) or explicitly handle a potential SecurityException".
I have inserted this in the manifiest
Code:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
2) I tried to run this example in the AVD of android studio. It stopped immediately (could not see anything). The android monitor has a lot of messages I don't understand.
Then I activate genimotion and when running the app there, I could see the program in motion and successfully do what is does (which is very simple, just put the (simulated) GPS value on screen)
3) I am worried about the amount of messages on the Android Monitor and in the RUN screen. (in this one, there is a lot of messages in dark red for example:
Code:
Failed to sync vcpu reg
Failed to sync vcpu reg
EAX=00000000 EBX=00000000 ECX=00000000 EDX=00000663
ESI=00000000 EDI=00000000 EBP=00000000 ESP=00000000
EIP=0000fff0 EFL=00000002 [-------] CPL=0 II=0 A20=1 SMM=0 HLT=0
ES =0000 00000000 0000ffff 00009300
CS =f000 ffff0000 0000ffff 00009b00
SS =0000 00000000 0000ffff 00009300
DS =0000 00000000 0000ffff 00009300
FS =0000 00000000 0000ffff 00009300
GS =0000 00000000 0000ffff 00009300
LDT=0000 00000000 0000ffff 00008200
TR =0000 00000000 0000ffff 00008b00
GDT= 00000000 0000ffff
IDT= 00000000 0000ffff
CR0=60000010 CR2=00000000 CR3=00000000 CR4=00000000
DR0=00000000 DR1=00000000 DR2=00000000 DR3=00000000
DR6=ffff0ff0 DR7=00000400
EFER=0000000000000000
Failed to sync vcpu reg
Failed to sync vcpu reg
EAX=00000000 EBX=00000000 ECX=00000000 EDX=00000663
ESI=00000000 EDI=00000000 EBP=00000000 ESP=00000000
EIP=0000fff0 EFL=00000002 [-------] CPL=0 II=0 A20=1 SMM=0 HLT=0
ES =0000 00000000 0000ffff 00009300
CS =f000 ffff0000 0000ffff 00009b00
SS =0000 00000000 0000ffff 00009300
DS =0000 00000000 0000ffff 00009300
FS =0000 00000000 0000ffff 00009300
GS =0000 00000000 0000ffff 00009300
LDT=0000 00000000 0000ffff 00008200
TR =0000 00000000 0000ffff 00008b00
GDT= 00000000 0000ffff
IDT= 00000000 0000ffff
CR0=60000010 CR2=00000000 CR3=00000000 CR4=00000000
DR0=00000000 DR1=00000000 DR2=00000000 DR3=00000000
DR6=ffff0ff0 DR7=00000400
EFER=0000000000000000
Failed to sync vcpu reg
Failed to sync vcpu reg
EAX=00000000 EBX=00000000 ECX=00000000 EDX=00000663
ESI=00000000 EDI=00000000 EBP=00000000 ESP=00000000
EIP=0000fff0 EFL=00000002 [-------] CPL=0 II=0 A20=1 SMM=0 HLT=0
ES =0000 00000000 0000ffff 00009300
CS =f000 ffff0000 0000ffff 00009b00
SS =0000 00000000 0000ffff 00009300
DS =0000 00000000 0000ffff 00009300
FS =0000 00000000 0000ffff 00009300
GS =0000 00000000 0000ffff 00009300
LDT=0000 00000000 0000ffff 00008200
TR =0000 00000000 0000ffff 00008b00
GDT= 00000000 0000ffff
4) and lastly, I deactivated the (simulated)GPS in genimotion and still the activity shows the last value. it does not show me the message to activate even though that is explicitly in onResume(). I wonder what is wrong here
Any help greatly appreciated