1
我是Codename One的新手,我試圖從StateMachine.java調用本地接口,並從本機接口實現中獲取一些值。我該怎麼做?如何從StateMachineBase.java調用本地接口並使用Codename One從本機實現中發回一些值?
下面是我想從StateMachine.java調用NativeAndroidImpl.java和NativeAndroidImpl.java
獲得的經度和緯度值StateMachine.java和本地接口實現,NativeAndroidImpl.java的代碼
----------------------------StateMachine.java----------------------------
@Override
protected void onMain_MainHelpButtonAction(Component c, ActionEvent event) {
Vector<String> vec = (Vector<String>)Storage.getInstance().readObject("SavedData");
//Invoke NativeAndroidImpl.java
double lat=//get latitude from NativeAndroidImpl.java
double lng=//get longitude from NativeAndroidImpl.java
try {
Display.getInstance().sendSMS(vec.elementAt(2), "I am in trouble. Send HELP! My location: http://maps.google.com/?q=" + lat + "," + lng, true);
} catch (IOException ex) {
Dialog.show("Error!", "Failed to send SMS.", "OK", null);
ex.printStackTrace();
}
}
}
------------------------NativeAndroidImpl.java--------------------------
package com.anonymous.emergencyhelp;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.provider.Settings;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class NativeAndroidImpl {
LocationManager locationManager;
double longitudeNetwork, latitudeNetwork;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
}
private boolean checkLocation() {
if(!isLocationEnabled())
showAlert();
return isLocationEnabled();
}
private void showAlert() {
final AlertDialog.Builder dialog = new AlertDialog.Builder(this);
dialog.setTitle("Enable Location")
.setMessage("Your Locations Settings is set to 'Off'.\nPlease Enable Location to use this app")
.setPositiveButton("Location Settings", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface paramDialogInterface, int paramInt) {
Intent myIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(myIntent);
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface paramDialogInterface, int paramInt) {
}
});
dialog.show();
}
private boolean isLocationEnabled() {
return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) ||
locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
}
public void toggleNetworkUpdates(View view) {
if(!checkLocation())
return;
Button button = (Button) view;
if(button.getText().equals("Help"))
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 60 * 1000, 10, locationListenerNetwork);
}
private final LocationListener locationListenerNetwork = new LocationListener() {
public void onLocationChanged(Location location) {
longitudeNetwork = location.getLongitude();
latitudeNetwork = location.getLatitude();
runOnUiThread(new Runnable() {
@Override
public void run() {
//Send longitude and latitude values to StateMachine.java
Toast.makeText(MainActivity.this, "Network Provider update", Toast.LENGTH_SHORT).show();
}
});
}
@Override
public void onStatusChanged(String s, int i, Bundle bundle) {
}
@Override
public void onProviderEnabled(String s) {
}
@Override
public void onProviderDisabled(String s) {
}
};
public boolean isSupported() {
return true;
}
}
我已經瀏覽了關於本地接口的視頻教程,但我不確定如何在我的情況下做到這一點。 – anonymous
在我的StateMachine.java中,我想運行這些Android代碼,因爲Codename One目前不支持打開GPS – anonymous
如果GPS明確關閉,那麼我們不打開GPS,也不打開該本地代碼。您的代碼不如我們使用播放服務的位置代碼 –