2017-02-11 10 views
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; 
    } 

} 

回答

1

看看這個tutorial for using native interfaces

請注意,由於Codename One中存在跨平臺位置API,因此您不需要用於位置的本機接口。我建議查看開發者指南和tutorials for Codename One

+0

我已經瀏覽了關於本地接口的視頻教程,但我不確定如何在我的情況下做到這一點。 – anonymous

+0

在我的StateMachine.java中,我想運行這些Android代碼,因爲Codename One目前不支持打開GPS – anonymous

+0

如果GPS明確關閉,那麼我們不打開GPS,也不打開該本地代碼。您的代碼不如我們使用播放服務的位置代碼 –

相關問題