0

私は次のことをしようとしています。

-私ができる文字列として保存されている経度と緯度を取得します

- Google マップを開くクリック可能な URL に挿入します (例: http://maps.google.com/long=string1+lat=string2 ) - この URL は、デフォルトのメール アプリで送信されるメールに含まれています。

URI、Linkify、Reverse GeoCoding を調べてみましたが、何も得られないようです。座標を取得してトースト通知として表示することはできますが、他の場所で使用するためにそれらを保存しようとすると、現時点では問題があります。

String String lat = Double.toString(location.getLatitude) を文字列にしましたが、そこから何も取得できませんでした。または、おそらく GPS ロックがなかったため、コードが実行された時点で取得する座標がなかったのかもしれません。 、よくわかりません。以下のコードを参照してください。

public class ConfirmScreen extends Activity{

String mapCoord = "http://maps.google.com";

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_confirm_screen);


    LocationManager mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
    LocationListener mLocListener = new MyLocationListener();
    mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0, mLocListener);

    sendEmail();
    playSound();
}

public void backHome(View view) 
{
    Intent intent = new Intent (this, MainScreen.class);
    startActivity(intent);
}

// Method to start playing and looping a sound.

public void playSound()
{
    MediaPlayer clickSound = MediaPlayer.create(this, R.raw.warning);
    SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
    Boolean soundCheck = sp.getBoolean("SOUND", false);
    if (soundCheck)
    {
        clickSound.start();
    }

}// method end

public void sendEmail()
{
    SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
    String nameValue = sp.getString("NAME", "failed to get name");
    String emailValue = sp.getString("EMAIL", "failed to get email");
    Intent i = new Intent(Intent.ACTION_SEND);
    i.setType("message/rfc822");
    i.putExtra(Intent.EXTRA_EMAIL, new String[]{emailValue});
    i.putExtra(Intent.EXTRA_SUBJECT, "Email sent from DON'T PANIC - A Chris O'Brien Project");
    i.putExtra(Intent.EXTRA_TEXT, "Hi there\n" + nameValue + " is in mortal danger. Please see the co-ords attached and run to their rescue!" +
            " If you don't see any co-ords, they didn't check the box and assume you know where they are.\nKind Regards\nDon't Panic! \n\n" +  mapCoord);

    try
    {   startActivity(Intent.createChooser(i, "Send mail...."));
    } 
    catch (android.content.ActivityNotFoundException ex){

        Toast.makeText(ConfirmScreen.this, "There are no email clients installed or set up", Toast.LENGTH_SHORT).show();
    }
}

//Location Listener
public class MyLocationListener implements LocationListener
{
    @Override
    public void onLocationChanged(Location location) {
        location.getLatitude();
        location.getLongitude();

        String text = "Current Location is \nLat: " + location.getLatitude() + " \nLng: " + location.getLongitude();
        //mapCoord =  Double.toString(location.getLatitude()) + " " + Double.toString(location.getLongitude());

        Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onProviderDisabled(String provider) {
        Toast.makeText(getApplicationContext(), "GPS Disabled", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onProviderEnabled(String provider) {
        Toast.makeText(getApplicationContext(), "GPS Enabled", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub

    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_confirm_screen, menu);
    return true;
}
}
4

1 に答える 1

0

コードで mapCoord を に設定し"http://maps.google.com"ます。次に、これがメールのテキストに追加されます。また、次の行をコメントアウトしたことにも気付きましたonLocationChanged():

//mapCoord =  Double.toString(location.getLatitude()) + " " +
                  Double.toString(location.getLongitude());

この方法でユーザーの座標を取得できますが、問題は位置更新のコールバックが非同期であることです。電話すると

mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0, mLocListener);

MyLocationListenerこれは、コールバックを受信するように登録するだけです。ユーザーの位置が変わるまで、実際にはコールバックを生成しません。しかし、あなたはそれを待ちません。あなたはすぐにメールを送信します。ほとんどの場合、コールバックがまだコールバックされていないため、ロケーションは空になります。

LocationManager.getLastKnownLocation()(最後の既知の場所ですぐに返されます)を使用しようとすることができますが、私の経験では、しばしば null を返します。

また、更新を登録して、ユーザーに「現在地を検出しています...」という進行状況ダイアログを表示し、onLocationChanged()コールバックされるまで待つこともできます。

于 2012-09-27T14:55:48.867 に答える