Java 将位置输出到sms

Java 将位置输出到sms,java,android,android-intent,android-location,Java,Android,Android Intent,Android Location,我正在尝试将从gps/网络接收到的位置输出到sms中。我已经尝试过使用地理代码并对列表使用try-catch,但是我需要帮助将getAddressLine输出到按钮setOnClickListener中。这是我的密码。多谢各位 LocationManager lm = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); //conversion Criteria criteria = new

我正在尝试将从gps/网络接收到的位置输出到sms中。我已经尝试过使用地理代码并对列表使用try-catch,但是我需要帮助将getAddressLine输出到按钮setOnClickListener中。这是我的密码。多谢各位

    LocationManager lm = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
    //conversion
    Criteria criteria = new Criteria();
    String bp = lm.getBestProvider(criteria, false);
    Location location = lm.getLastKnownLocation(bp);
    double lat = location.getLatitude();
    double lon = location.getLongitude();
    final Geocoder gc = new Geocoder(this, Locale.getDefault());
        try{
            List<Address> address;
            address = gc.getFromLocation(lat, lon, 1);
            Address ad = address.get(0);
                  StringBuffer geo = new StringBuffer();
            geo = geo.append(ad.getAddressLine(0));
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    //ends here
    LocationListener ll = new LocationListener(){
        public void onLocationChanged(Location location) {
            // TODO Auto-generated method stub
            Log.d("Location", location.toString());
        }
        public void onProviderDisabled(String provider) {
            // TODO Auto-generated method stub
        }
        public void onProviderEnabled(String provider) {
            // TODO Auto-generated method stub
        }
        public void onStatusChanged(String provider, int status,
                Bundle extras) {
            // TODO Auto-generated method stub
        }
    };
    lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, ll);
    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, ll);

我想在loc.putExtra上显示输出以达到目的。

您正在try/catch块中本地创建
geo
变量:您需要将其移动到某种全局变量,因此当您单击按钮时,
geo
变量实际上存在


如果您这样做(并且如果您的
Geocoder
实例工作正常),这应该适合您

如果我使用locationmanager.toString(),我会得到一个输出android.location。LocationManager@44ee7718. 我想展示一个输出,比如加利福尼亚州洛杉矶90501。感谢您的回答,我找到了Geocoder gc=new Geocoder(这个,Locale.getDefault());列表地址=空;尝试{addresses=gc.getFromLocation(lat,lon,1);}catch(IOException e){//TODO自动生成的catch块e.printStackTrace();}Address=addresses.get(0);最后一个字符串ad=address.getAddressLine(0);当我在putExtra中添加广告时,它不会给我任何错误,但应用程序不会运行。。。还有其他想法吗?不运行吗?它在Android日志文件中产生了哪些错误?它会因为异常而崩溃吗?对不起,我是android编程新手。当我运行模拟器并运行我的应用程序时,它会给我一个错误,应用程序意外停止。请再试一次。我在代码中没有看到任何错误。。。我怎么看这个错误?它是这样显示的。。。05-07 17:59:39.279:W/dalvikvm(278):threadid=1:线程以未捕获异常退出(组=0x4001d800)05-07 17:59:39.299:E/AndroidRuntime(278):致命异常:main 05-07 17:59:39.299:E/AndroidRuntime(278):java.lang.RuntimeException:无法启动活动组件信息{com.example.sd/com.example.sd.MainActivity}:java.lang.NullPointerException 05-07 17:59:39.299:E/AndroidRuntime(278):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)上,您有一个不同的错误:您需要查找NullPointer引用的行号并修复它,然后才能继续。
btn.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Intent loc = new Intent (Intent.ACTION_VIEW);
            loc.putExtra("sms_body", geo);
            loc.setType("vnd.android-dir/mms-sms");
            startActivity(loc);
        }
    });