如何将 GPS 和网络位置坐标发送到服务器(静态 IP)?

2023-12-06

我是 Android 开发的初学者。我想制作一个 Android 应用程序,它将 GPS 和网络位置(纬度和经度)发送到我的服务器(静态 IP)。 我找到了以下代码并且它工作成功,在服务器端已经制作的应用程序中接收数据(现在它与客户端应用程序无关)

当我单击 Android 应用程序上的“发送位置”按钮时,我的服务器收到的数据。

  • 获取/31.4244456/74.7349772 HTTP/1.1

  • 主机:180.178.169.77:6081

  • 连接:保持活动状态

  • 用户代理:Apache-HttpClient/不可用 (java 1.4)

180.178.169.77是我的服务器IP,6081是端口

此时一切都很顺利,我几乎实现了我想要的目标,但我面临的真正问题是我的 Android 应用程序在将此数据发送到服务器后挂起并崩溃。如果有人有想法,请解决我的问题。

我从这里找到了代码。http://www.gideondsouza.com/blog/how-to-get-the-current-location-address-and-send-it-to-a-server-on-android#.UNLbTOT0Dxo

这是我的 AddressActivity.java

package com.gideon.address;

import java.io.IOException;
import java.util.List;
import java.util.Locale;

import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import android.app.Activity;
import android.content.Context;
import android.location.Address;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;


public class AddressActivity extends Activity {
/** Called when the activity is first created. */
String lat="", lon="";

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

    Button btnLocation = (Button)findViewById(R.id.btnLocation);
    btnLocation.setOnClickListener(new OnClickListener() {
        public void onClick(View arg0) {
            // Acquire a reference to the system Location Manager
            LocationManager locationManager = (LocationManager) AddressActivity.this.getSystemService(Context.LOCATION_SERVICE);
            // Define a listener that responds to location updates
            LocationListener locationListener = new LocationListener() {
                public void onLocationChanged(Location location) {
                    // Called when a new location is found by the network location provider.
                    lat = Double.toString(location.getLatitude());
                    lon = Double.toString(location.getLongitude());
                    TextView tv = (TextView) findViewById(R.id.txtLoc);
                    tv.setText("Your Location is:" + lat + "--" + lon);
                }

                public void onStatusChanged(String provider, int status, Bundle extras) {}
                public void onProviderEnabled(String provider) {}
                public void onProviderDisabled(String provider) {}
            };
            // Register the listener with the Location Manager to receive location updates
            locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
        }
    });

    Button btnSend = (Button)findViewById(R.id.btnSend);
    btnSend.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            postData(lat, lon);
        }
    });

    Button btnAdd = (Button)findViewById(R.id.btnAddress);
    btnAdd.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            TextView tv = (TextView)findViewById(R.id.txtAddress);
            tv.setText(GetAddress(lat, lon));
        }
    });

}

public void postData(String la, String lo) {
    // Create a new HttpClient and Post Header
    HttpClient httpclient = new DefaultHttpClient();
    //HttpGet  htget = new HttpGet("http://myappurl.com/Home/Book/"+la+"/"+lo);
    HttpGet  htget = new HttpGet("http://180.178.169.77:6081/"+la+"/"+lo);

    try {
        // Execute HTTP Post Request
        HttpResponse response = httpclient.execute(htget);
        String resp = response.getStatusLine().toString();
        Toast.makeText(this, resp, 5000).show();


    } catch (ClientProtocolException e) {
        Toast.makeText(this, "Error", 5000).show();
    } catch (IOException e) {
        Toast.makeText(this, "Error", 5000).show();
    }
} 
public String GetAddress(String lat, String lon)
{
    Geocoder geocoder = new Geocoder(this, Locale.ENGLISH);
    String ret = "";
    try {
        List<Address> addresses = geocoder.getFromLocation(Double.parseDouble(lat), Double.parseDouble(lon), 1);
        if(addresses != null) {
            Address returnedAddress = addresses.get(0);
            StringBuilder strReturnedAddress = new StringBuilder("Address:\n");
            for(int i=0; i<returnedAddress.getMaxAddressLineIndex(); i++) {
                strReturnedAddress.append(returnedAddress.getAddressLine(i)).append("\n");
            }
            ret = strReturnedAddress.toString();
        }
        else{
            ret = "No Address returned!";
        }
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        ret = "Can't get Address!";
    }
    return ret;
}
}

这是我的 AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.gideon.address"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="8" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".AddressActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

Move postData从主线程切换到辅助线程。看着Async任务示例如下:http://developer.android.com/reference/android/os/AsyncTask.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 GPS 和网络位置坐标发送到服务器(静态 IP)? 的相关文章

随机推荐

  • 使用WebClient在Unity3d中下载大文件

    我正在寻找有关使用 WebClient 在 Unity3d 中下载大型 100mg 文件的任何想法 WWW 异步运行 除了返回内存错误并使应用程序崩溃之外 这将是完美的 因此我已转向此处概述的解决方案 如何在C Sharp中使用unity3
  • 将 JScrollPane 组件添加到 JTable 列

    我正在尝试向 JTable 中的特定列添加滚动功能 我已经实现了一个自定义 TableCellRenderer 组件 我可以很好地看到表格内的滚动窗格 但我无法滚动它 我也尝试过实现 TableCellEditor 但没有任何运气 publ
  • Symfony2 自定义错误异常监听器 - 渲染模板或传递给控制器

    我正在尝试找出在 Symfony2 中处理自定义错误页面的最佳方法 这包括 500 和 404 等 我可以创建自己的自定义模板 error404 html twig 等 并很好地渲染它们 问题是 应用程序需要将一些变量传递到基本模板中以使页
  • 如何避免javascript命名空间冲突?

    我有一个企业应用程序 它导入一些java脚本库 假设A 以及全局命名空间中的一些函数 我们的客户可以扩展我们的平台并导入 jquery 这将导致命名空间冲突 对我来说 帮助客户避免命名空间冲突的最佳方法是什么 因为 jquery 非常流行并
  • 将“numpy.mean”与元组一起用作“axis”参数:不适用于屏蔽数组

    我有一个简单的 3D 数组a1 及其掩码模拟a2 import numpy a1 numpy array 0 00 0 00 0 00 0 88 0 80 0 78 0 75 0 78 0 77 0 00 0 00 0 00 3 29 3
  • ASP.NET mvc 身份验证或会话过期速度比设置的要快

    在我的 ASP NET MVC5 中websiteweb config中的登录和会话超时如下
  • WinForms:当鼠标进入控件时如何使MouseEnter触发?

    我有一个Panel其中包含任意数量的子控件 如果鼠标进入子控件之一Panel 然后MouseEnter事件的Panel没有被解雇 Note 一个相关的问题是 如果鼠标从panel到其中之一子控件 那么专家组的MouseLeave事件被触发
  • jenkins - 无法 ssh 到远程服务器(密钥 - 权限被拒绝),但可以从 cli 工作

    我在本地计算机上运行 Jenkins 试图找出服务器上遇到的远程 ssh 问题 我收到此权限被拒绝错误 这表明密钥有问题 但从 shell 上的同一用户帐户 我绝对可以连接 Started by user anonymous Buildin
  • Javascript正则表达式尝试将名称拆分为标题/名字/姓氏

    我想尝试在 Javascript 中检测一个人名字的不同部分 并将它们剪掉 以便我可以将它们传递给其他东西 名称可以以任何格式出现 例如 维多利亚小姐莱恩 龙志杰小姐 鲍勃 史密斯 Fred Mr Davis 我想尝试写一些简单的东西 这样
  • Visual Studio 设置和部署:添加先决条件

    如何将我希望客户端拥有更多组件的设置和部署项目添加到其中 例如 Microsoft Chart Controls Microsoft SQL 2008 Express Edition not 2005 etc 替代文本http img55
  • 获取上周六的日期 - BusyBox 1.1.0

    由于 BusyBox 中的日期功能不如gnu date 我在计算上周六的日期时遇到问题 last sat date Y m d d last saturday 只适用于 gnu date 我发现了类似的东西可以从 Epoch 计算 busy
  • MVC Web Api 不允许 Windows 身份验证

    我有一个简单的 MVC web api 2 IIS 托管应用程序 我想启用 Windows 身份验证 最初不使用 Owin 我在我的开发机器上运行它并作为本地 IIS 运行 因此 根据我所能找到的 我需要将以下内容添加到 web confi
  • Python 共享库:RTLD_GLOBAL 段错误

    我使用 python swig 包装的 C 库 在它的 init py文件 它sets在导入包含实现代码的共享对象文件之前 使用 dlopen 标志 RTLD GLOBAL 这会导致随后导入 scipy linalg 出现段错误 至少在我的
  • 在c++中实现多个接口

    我的接口层次结构如下 class A public void foo 0 class B public A public void testB 0 class C public A public void testC 0 现在 我想通过相同
  • 如何以编程方式在 iOS 中更改/添加连接 WiFi 的 DNS 服务器?

    我想以编程方式在 iOS 中更改 添加 iPhone 设备连接 WiFi 的 DNS 服务器 Google 公共 DNS IP 地址 IPv4 如下 8 8 8 8 8 8 4 4 我想以编程方式更改 添加它 就像所附屏幕截图中一样 请帮忙
  • Scala Spark:展平键/值结构数组

    我有一个输入数据框 其中包含一个数组类型的列 数组中的每个条目都是一个由键 大约四个值之一 和值组成的结构 我想将其转换为一个数据框 其中每个可能的键都具有一列 并且该值不在该行的数组中的情况下为空 键在任何数组中都不会重复 但它们可能会乱
  • 用不同的颜色对线条进行动画处理

    我正在尝试将我的数据动画化以进行演示 我正在尝试使用 python 的动画包来做到这一点 我想做的事情大致可以归结为第一个例子http jakevdp github io blog 2012 08 18 matplotlib animati
  • Karate-Gattle:报告中带有查询参数的请求未聚合

    我正在对空手道加特林进行 POC 以重复使用我的测试 我已参考文档并安装了这些版本 首先 一切都像往常一样很棒 非常容易设置和启动 我正在调用一个功能文件MySimualtion scala其中还有另外三个抽象功能调用 如下所示 def t
  • 将 Adob​​e Air 3.3 SDK 与 Flash Builder 结合使用

    Adobe Air SDK V3 3终于于2012年6月8日发布 可以在这里下载 http www adobe com products air html 现在我尝试在 Flash Builder V4 6 中使用它 方法是在 Applic
  • 如何将 GPS 和网络位置坐标发送到服务器(静态 IP)?

    我是 Android 开发的初学者 我想制作一个 Android 应用程序 它将 GPS 和网络位置 纬度和经度 发送到我的服务器 静态 IP 我找到了以下代码并且它工作成功 在服务器端已经制作的应用程序中接收数据 现在它与客户端应用程序无