通过电子邮件发送我当前的位置地址

时间:2013-01-29 07:30:39

标签: android email send currentlocation

我遇到问题,我当前的位置地址显示了一个textView

但问题是点击发送按钮后,错误将会出现

但我想通过电子邮件发送我当前的位置谷歌地图超链接

请检查我的问题,请给我任何解决方案

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
 // making it full screen
    requestWindowFeature(Window.FEATURE_NO_TITLE);        
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.activity_main);
   ........
 }
 @Override
public void onLocationChanged(Location location) {
    TextView tvLocation = (TextView) findViewById(R.id.tv_location);

    String address = "";
    Geocoder geoCoder = new Geocoder(
            getBaseContext(), Locale.getDefault());

    // Getting latitude
    double latitude = location.getLatitude();

    // Getting longitude
    double longitude = location.getLongitude();

    // Creating an instance of GeoPoint corresponding to latitude and longitude
    GeoPoint point = new GeoPoint((int)(latitude * 1E6), (int)(longitude*1E6));

    try {
        List<Address> addresses = geoCoder.getFromLocation(
            point.getLatitudeE6()  / 1E6, 
            point.getLongitudeE6() / 1E6, 1);

            if (addresses.size() > 0) {
                for (int index = 0; index < addresses.get(0).getMaxAddressLineIndex(); index++)
                    address += addresses.get(0).getAddressLine(index) + " ";
            }
            tvLocation.setText("Address :" +  address  );
    }
    catch (IOException e) {                
        e.printStackTrace();
    }
    // Setting latitude and longitude in the TextView tv_location
    tvLocation.setText("Latitude:" +  latitude  + ", Longitude:"+ longitude +", Add :"+ address );

    // Getting MapController
    MapController mapController = mapView.getController();

    // Locating the Geographical point in the Map
    mapController.animateTo(point);

    // Applying a zoom
    mapController.setZoom(15);

    // Redraw the map
    mapView.invalidate();

    // Getting list of overlays available in the map
    List<Overlay> mapOverlays = mapView.getOverlays();

    // Creating a drawable object to represent the image of mark in the map
    Drawable drawable = this.getResources().getDrawable(R.drawable.cur_position);

    // Creating an instance of ItemizedOverlay to mark the current location in the map
    CurrentLocationOverlay currentLocationOverlay = new CurrentLocationOverlay(drawable);

    // Creating an item to represent a mark in the overlay
    OverlayItem currentLocation = new OverlayItem(point, "Current Location", "Latitude : " + latitude + ", Longitude:" + longitude);

    // Adding the mark to the overlay
    currentLocationOverlay.addOverlay(currentLocation);

    // Clear Existing overlays in the map
    mapOverlays.clear();

    // Adding new overlay to map overlay
   mapOverlays.add(currentLocationOverlay); 

}

public void onSendLocationEmail(View button) {

    final TextView txtview = (TextView) findViewById(R.id.tv_location);
    String txt = txtview.getText().toString();

    // Take the fields and format the message contents
    String subject = formatSubject(txt);
    String message = formatMessage(txt);

    sendMessage(subject, message);
    Toast.makeText(getApplicationContext(),"Clicked Send Email Button" + "-", Toast.LENGTH_SHORT).show();
} 

private String formatSubject(String txt) {

    String strSubjectFormat = getResources().getString(R.string.mapsubject_format);

    String strSubject = String.format(strSubjectFormat, txt);

    return strSubject;

}

private String formatMessage(String txt) {
    String strFormatMsg = getResources().getString(R.string.mapbody_format);

 //String strRequiresResponse = getResponseString(bRequiresResponse);

    String strMsg = String.format(strFormatMsg, txt);

    return strMsg;

}

private void sendMessage(String subject, String message) {
    Intent messageIntent = new Intent(android.content.Intent.ACTION_SEND);

    CharSequence location = lastLocation.getLatitudeE6()/ 1E6 + "," + lastLocation.getLongitudeE6()/ 1E6;

    String aEmailList[] = { "srinivasareddy1250@gmail.com" };
    messageIntent.putExtra(android.content.Intent.EXTRA_EMAIL, aEmailList);

    messageIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, subject);

    messageIntent.setType("plain/text");
    messageIntent.putExtra(android.content.Intent.EXTRA_TEXT, message + "http://maps.google.comk/maps/maps?q=loc:"+location);

}

这是我的错误

不幸的是项目已经停止

01-29 07:34:39.439: E/AndroidRuntime(3693): FATAL EXCEPTION: main
01-29 07:34:39.439: E/AndroidRuntime(3693): java.lang.IllegalStateException: Could not execute method of the activity
01-29 07:34:39.439: E/AndroidRuntime(3693):     at android.view.View$1.onClick(View.java:3597)
01-29 07:34:39.439: E/AndroidRuntime(3693):     at android.view.View.performClick(View.java:4202)
01-29 07:34:39.439: E/AndroidRuntime(3693):     at android.view.View$PerformClick.run(View.java:17340)
01-29 07:34:39.439: E/AndroidRuntime(3693):     at android.os.Handler.handleCallback(Handler.java:725)
01-29 07:34:39.439: E/AndroidRuntime(3693):     at android.os.Handler.dispatchMessage(Handler.java:92)
01-29 07:34:39.439: E/AndroidRuntime(3693):     at android.os.Looper.loop(Looper.java:137)
01-29 07:34:39.439: E/AndroidRuntime(3693):     at android.app.ActivityThread.main(ActivityThread.java:5039)
01-29 07:34:39.439: E/AndroidRuntime(3693):     at java.lang.reflect.Method.invokeNative(Native Method)
01-29 07:34:39.439: E/AndroidRuntime(3693):     at java.lang.reflect.Method.invoke(Method.java:511)
 01-29 07:34:39.439: E/AndroidRuntime(3693):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
01-29 07:34:39.439: E/AndroidRuntime(3693):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
01-29 07:34:39.439: E/AndroidRuntime(3693):     at dalvik.system.NativeStart.main(Native Method)
01-29 07:34:39.439: E/AndroidRuntime(3693): Caused by: java.lang.reflect.InvocationTargetException
01-29 07:34:39.439: E/AndroidRuntime(3693):     at java.lang.reflect.Method.invokeNative(Native Method)
01-29 07:34:39.439: E/AndroidRuntime(3693):     at java.lang.reflect.Method.invoke(Method.java:511)
01-29 07:34:39.439: E/AndroidRuntime(3693):     at android.view.View$1.onClick(View.java:3592)
01-29 07:34:39.439: E/AndroidRuntime(3693):     ... 11 more
01-29 07:34:39.439: E/AndroidRuntime(3693): Caused by: java.lang.NullPointerException
 01-29 07:34:39.439: E/AndroidRuntime(3693):    at com.sygnet.locationingooglemap.MainActivity.sendMessage(MainActivity.java:219)
01-29 07:34:39.439: E/AndroidRuntime(3693):     at com.sygnet.locationingooglemap.MainActivity.onSendLocationEmail(MainActivity.java:191)
01-29 07:34:39.439: E/AndroidRuntime(3693):     ... 14 more

4 个答案:

答案 0 :(得分:2)

这是当前位置地址的完整代码

检查此代码......

  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
 // making it full screen
    requestWindowFeature(Window.FEATURE_NO_TITLE);        
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.activity_main);

    // Getting reference to MapView
    mapView = (MapView) findViewById(R.id.map_view);

    // Setting Zoom Controls on MapView
    mapView.setBuiltInZoomControls(true);



    List<Overlay> mapOverlays = mapView.getOverlays();
    mlo = new MyLocationOverlay(this.getApplicationContext(),mapView);

    if(!mlo.enableMyLocation()){
            Toast.makeText(this, R.string.toast, Toast.LENGTH_LONG).show();
            this.finish();
    }
    mlo.enableCompass();
    mapOverlays.add(mlo);

      ......

  }  
  @Override
public void onLocationChanged(Location location) {
    tvLocation = (TextView) findViewById(R.id.tv_location);

    String address = "";
    Geocoder geoCoder = new Geocoder(
            getBaseContext(), Locale.getDefault());

    // Getting latitude
    latitude = location.getLatitude();

    // Getting longitude
    longitude = location.getLongitude();

    // Creating an instance of GeoPoint corresponding to latitude and longitude
    point = new GeoPoint((int)(latitude * 1E6), (int)(longitude*1E6));

    try {
        List<Address> addresses = geoCoder.getFromLocation(
            point.getLatitudeE6()  / 1E6, 
            point.getLongitudeE6() / 1E6, 1);

            if (addresses.size() > 0) {
                for (int index = 0; index < addresses.get(0).getMaxAddressLineIndex(); index++)
                    address += addresses.get(0).getAddressLine(index) + " ";
            }
            tvLocation.setText("Address :" +  address  );
    }
    catch (IOException e) {                
        e.printStackTrace();
    }
    // Setting latitude and longitude in the TextView tv_location
    tvLocation.setText("Latitude:" +  latitude  + ", Longitude:"+ longitude +", Address :"+ address );

    // Getting MapController
    MapController mapController = mapView.getController();

    // Locating the Geographical point in the Map
    mapController.animateTo(point);

    // Applying a zoom
    mapController.setZoom(15);

    // Redraw the map
    mapView.invalidate();

    // Getting list of overlays available in the map
    List<Overlay> mapOverlays = mapView.getOverlays();

    // Creating a drawable object to represent the image of mark in the map
    Drawable drawable = this.getResources().getDrawable(R.drawable.cur_position);

    // Creating an instance of ItemizedOverlay to mark the current location in the map
    CurrentLocationOverlay currentLocationOverlay = new CurrentLocationOverlay(drawable);

    // Creating an item to represent a mark in the overlay
    OverlayItem currentLocation = new OverlayItem(point, "Current Location", "Latitude : " + latitude + ", Longitude:" + longitude);

    // Adding the mark to the overlay
    currentLocationOverlay.addOverlay(currentLocation);

    // Clear Existing overlays in the map
    mapOverlays.clear();

    // Adding new overlay to map overlay
   mapOverlays.add(currentLocationOverlay);         
}

public void onSendLocationEmail(View button) {      

    String txt = tvLocation.getText().toString();

    // Take the fields and format the message contents
    String subject = formatSubject(txt);
    String message = formatMessage(txt);

    sendMessage(subject, message, location);
    Toast.makeText(getApplicationContext(),"Clicked Send Email Button" + "-", Toast.LENGTH_SHORT).show();
} 

private String formatSubject(String txt) {

    String strSubjectFormat = getResources().getString(R.string.mapsubject_format);

    String strSubject = String.format(strSubjectFormat, txt);

    return strSubject;

}

private String formatMessage(String txt) {
    String strFormatMsg = getResources().getString(R.string.mapbody_format);

    String strMsg = String.format(strFormatMsg, txt);

    return strMsg;  
} 

private void sendMessage(String subject, String message,Location location) {

     try {
    Intent messageIntent = new Intent(android.content.Intent.ACTION_SEND);
    messageIntent.setType("plain/text");        

    String aEmailList[] = { "mailId@gmail.com" };
    messageIntent.putExtra(android.content.Intent.EXTRA_EMAIL, aEmailList);

    messageIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, subject);

    messageIntent.putExtra(android.content.Intent.EXTRA_TEXT, 
            message + "http://maps.google.com/maps?q=loc:" + latitude +","+ longitude);
    startActivity(Intent.createChooser(messageIntent, "Send mail..."));
}
     catch (Exception e) {
            Log.e(LOG_TAG, "sendPictureMessage() failed to start activity.", e);
            Toast.makeText(this, "There are no email clients installed.", Toast.LENGTH_LONG).show();
}
}

答案 1 :(得分:1)

  @Override
public void onLocationChanged(Location location) {
    tvLocation = (TextView) findViewById(R.id.tv_location);

    String address = "";
    Geocoder geoCoder = new Geocoder(
            getBaseContext(), Locale.getDefault());

    // Getting latitude
    double latitude = location.getLatitude();

    // Getting longitude
    double longitude = location.getLongitude();

    // Creating an instance of GeoPoint corresponding to latitude and longitude
    GeoPoint point = new GeoPoint((int)(latitude * 1E6), (int)(longitude*1E6));

    try {
        List<Address> addresses = geoCoder.getFromLocation(
            point.getLatitudeE6()  / 1E6, 
            point.getLongitudeE6() / 1E6, 1);

            if (addresses.size() > 0) {
                for (int index = 0; index < addresses.get(0).getMaxAddressLineIndex(); index++)
                    address += addresses.get(0).getAddressLine(index) + " ";
            }
            tvLocation.setText("Address :" +  address  );
    }
    catch (IOException e) {                
        e.printStackTrace();
    }
    // Setting latitude and longitude in the TextView tv_location
    tvLocation.setText("Latitude:" +  latitude  + ", Longitude:"+ longitude +", Add :"+ address );

    // Getting MapController
    MapController mapController = mapView.getController();

    // Locating the Geographical point in the Map
    mapController.animateTo(point);

    // Applying a zoom
    mapController.setZoom(15);

    // Redraw the map
    mapView.invalidate();

    // Getting list of overlays available in the map
    List<Overlay> mapOverlays = mapView.getOverlays();

    // Creating a drawable object to represent the image of mark in the map
    Drawable drawable = this.getResources().getDrawable(R.drawable.cur_position);

    // Creating an instance of ItemizedOverlay to mark the current location in the map
    CurrentLocationOverlay currentLocationOverlay = new CurrentLocationOverlay(drawable);

    // Creating an item to represent a mark in the overlay
    OverlayItem currentLocation = new OverlayItem(point, "Current Location", "Latitude : " + latitude + ", Longitude:" + longitude);

    // Adding the mark to the overlay
    currentLocationOverlay.addOverlay(currentLocation);

    // Clear Existing overlays in the map
    mapOverlays.clear();

    // Adding new overlay to map overlay
   mapOverlays.add(currentLocationOverlay); 

}

public void onSendLocationEmail(View button) {


    String txt = tvLocation.getText().toString();

    // Take the fields and format the message contents
    String subject = formatSubject(txt);
    String message = formatMessage(txt);

    sendMessage(subject, message);
    Toast.makeText(getApplicationContext(),"Clicked Send Email Button" + "-", Toast.LENGTH_SHORT).show();
} 

private String formatSubject(String txt) {

    String strSubjectFormat = getResources().getString(R.string.mapsubject_format);

    String strSubject = String.format(strSubjectFormat, txt);

    return strSubject;

}

private String formatMessage(String txt) {
    String strFormatMsg = getResources().getString(R.string.mapbody_format);

String strMsg = String.format(strFormatMsg, txt);

    return strMsg;

} 

private void sendMessage(String subject, String message) {

     try {
    Intent messageIntent = new Intent(android.content.Intent.ACTION_SEND);
    messageIntent.setType("plain/text");

    String aEmailList[] = { "srinivasareddy1250@gmail.com" };
    messageIntent.putExtra(android.content.Intent.EXTRA_EMAIL, aEmailList);

    messageIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, subject);


    messageIntent.putExtra(android.content.Intent.EXTRA_TEXT, message);
    startActivity(Intent.createChooser(messageIntent, "Send mail..."));
}
     catch (Exception e) {
            Log.e(LOG_TAG, "sendPictureMessage() failed to start activity.", e);
            Toast.makeText(this, "There are no email clients installed.", Toast.LENGTH_LONG).show();
}
}

答案 2 :(得分:0)

试试这个,我得到回应

  double lat = "your lat";
  double lon = "your lng";

   List<Address> addresses = new Geocoder(applicationContext,
                    Locale.getDefault()).getFromLocation(lat, lon, 1);
            if (addresses.size() > 0) {
                String addressLine = "";

                for (Integer i = 0; i < addresses.get(0)
                        .getMaxAddressLineIndex(); i++) {
                    if (!addressLine.equals("")) {
                        addressLine += ", ";
                    }

                    addressLine += addresses.get(0).getAddressLine(i);
                }

                if (addressLine != "") {
                    foundAddress += addressLine;
                }

            }

答案 3 :(得分:0)

请点击按钮尝试使用此代码:

String phoneNumber = "any contact number here";
 String message = textview1.getText().toString();
 SmsManager smsManager = SmsManager.getDefault();
 smsManager.sendTextMessage(phoneNumber, null, message, null, null);
 Toast.makeText(getApplicationContext(), "Message Sent!", Toast.LENGTH_LONG).show();