设计方法:安卓和网络服务

3
我正在开发一款与json/rest网络服务通信的Android移动应用程序。我需要定期向服务器发出某些类型的调用以检查一些信息。在这种情况下,我可能还需要查询GPS获取当前位置。我很犹豫是否使用本地服务,因为我不太清楚如何处理它们,事实上,我需要定期检索这些数据并相应地刷新MapView。我听说可以在服务中使用PendingIntents,将这些数据作为有效负载关联,并将它们发送到广播接收器,该接收器解包数据并刷新UI。我也听说这是一种糟糕的设计方法,因为广播接收器的用途不是用于此。请问有没有一些有用的提示?
1个回答

1

首先,您需要处理Google Maps,因为您将显示一个地图视图。请查看在mobiForge上使用Android中的Google Maps

其次,您需要一个提供GPS数据的类。使用消息处理程序获取位置数据并更新UI很简单。这是一个示例:

public MyGPS implements LocationListener{

    public LocationManager lm = null;
    private MainActivity SystemService = null;
    //lat, lng
    private double mLongitude = 0;
    private double mLatitude = 0;

    public MyGPS(MainActivity sservice){
        this.SystemService = sservice;
        this.startLocationService();
    }

    public void startLocationService(){
        this.lm = (LocationManager) this.SystemService.getSystemService(Context.LOCATION_SERVICE);
        this.lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3000, 5, this);
    }

    public void onLocationChanged(Location location) {
        location = this.lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
        try {
            this.mLongitude = location.getLongitude();
            this.mLatitude = location.getLatitude();
        } catch (NullPointerException e) {
            Log.i("Null pointer exception " + mLongitude + "," + mLatitude, null);
        }
    }
}

在您的onCreate方法中,创建此类的一个实例,位置监听器将开始监听GPS更新。但是,由于您不知道从活动中它们是否已设置或为空,因此无法访问lng和lat。因此,您需要一个处理程序,在设置lat和lng时向您的主活动发送消息:
在以下方法中进行修改:
public void onLocationChanged(Location location) {
        location = this.lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
        try {
            this.mLongitude = location.getLongitude();
            this.mLatitude = location.getLatitude();
            Message msg = Message.obtain();
            msg.what = UPDATE_LOCATION;
            this.SystemService.myViewUpdateHandler.sendMessage(msg);
        } catch (NullPointerException e) {
            Log.i("Null pointer exception " + mLongitude + "," + mLatitude, null);
        }
    }

在你的主活动中添加以下内容:
Handler myViewUpdateHandler = new Handler(){

        public void handleMessage(Message msg) {
                switch (msg.what) {
                case UPDATE_LOCATION:
                //access lat and lng   
         }));
               }

                super.handleMessage(msg);
        }
};

由于处理程序位于您的MapActivity中,因此您可以在处理程序本身轻松更新UI。每次可用GPS数据时,都会触发消息并由处理程序接收。

开发REST API是一件非常有趣的事情。一种简单的方法是在Web服务器上拥有一个php脚本,该脚本在请求时返回一些json数据。如果您想开发这样的服务,则此教程可能会对您有所帮助,link


谢谢。这很有帮助!我指的是来自WS的其他用户的位置的JSON表示形式(嗯,在不同的标准中)。所以我只想知道在哪里放置代码以进行HTTP请求,可能是在此处因为它本身就是服务,或者在不同的线程中。通过这种方式,每当我接收到位置更新时,就会在服务器上更新我的位置,并同时检索其他人的位置(使用不同的处理程序进行UI更新)。否则,这两个任务将在单独的线程中运行,但我不知道复杂性的程度。 - urobo
我发现了一个叫做“朋友查找器”的应用程序,这里有教程,可能对你很有趣,http://www.anddev.org/viewtopic.php?t=93 - DarkLeafyGreen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接