Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android:GPS跟踪系统,用于在近距离内寻找对方_Java_Android_Gps - Fatal编程技术网

Java Android:GPS跟踪系统,用于在近距离内寻找对方

Java Android:GPS跟踪系统,用于在近距离内寻找对方,java,android,gps,Java,Android,Gps,我必须开发一个Android应用程序,这个应用程序应该做的是帮助人们在不浪费太多能量的情况下在一个近距离内找到彼此。两人都可以在掌心朝上的情况下使用该应用程序来寻找对方。它可以使用gps提供初始行驶方向(向前、向左、向右、向后)。然后,它可以使用蓝牙和wifi强度,让用户大致了解他们是在离得更近还是更远。它不需要给出手机之间的具体距离 我遵循了这个()教程,效果很好。但我不知道如何在我的应用程序中使用它 我是一名开发Android应用程序的实习生,对GPS跟踪系统还不熟悉。实际上,我不清楚如何启

我必须开发一个Android应用程序,这个应用程序应该做的是帮助人们在不浪费太多能量的情况下在一个近距离内找到彼此。两人都可以在掌心朝上的情况下使用该应用程序来寻找对方。它可以使用gps提供初始行驶方向(向前、向左、向右、向后)。然后,它可以使用蓝牙和wifi强度,让用户大致了解他们是在离得更近还是更远。它不需要给出手机之间的具体距离

我遵循了这个()教程,效果很好。但我不知道如何在我的应用程序中使用它

我是一名开发Android应用程序的实习生,对GPS跟踪系统还不熟悉。实际上,我不清楚如何启动这个应用程序

这是我的尝试

我的xml文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<Button
    android:id="@+id/button2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/button1"
    android:layout_alignBottom="@+id/button1"
    android:layout_alignParentRight="true"
    android:onClick="stopNewService"
    android:text="Stop Service" />

<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_marginTop="23dp"
    android:onClick="startNewService"
    android:text="Start Service" />
这是我的MainActivity.java类

package com.example.service;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.widget.Toast;

public class MyService extends Service {

@Override
public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public void onCreate() {
    Toast.makeText(this, "The new Service was Created", Toast.LENGTH_LONG)
            .show();

}

@Override
public void onStart(Intent intent, int startId) {
    // For time consuming an long tasks you can launch a new thread here...
    Toast.makeText(this, " Service Started", Toast.LENGTH_LONG).show();

}

@Override
public void onDestroy() {
    Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show();

}

}
package com.example.service;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity implements View.OnClickListener {
private Button bStart, bStop;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

// Start the service
public void startNewService(View view) {

    startService(new Intent(this, MyService.class));
}

// Stop the service
public void stopNewService(View view) {

    stopService(new Intent(this, MyService.class));
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    switch (v.getId()) {
    case R.id.button1:
        startNewService(v);

        break;
    case R.id.button2:
        stopNewService(v);

        break;

    default:
        break;
    }
}

}
我已将该服务添加到清单文件中

<service android:name=".MyService"></service>

此外,我可以获得每个设备的位置,但问题是我应该如何在两个设备之间发送和接收这些数据

如果有人能帮助我澄清这一点,我将不胜感激


提前感谢。

如果您有服务器,可以使用以下代码:

  • 您可以定期运行(大约15分钟一次)。此服务可以将设备的位置发送到服务器,也可以获取朋友设备的位置。由于此服务将在后台定期运行,因此效率较高,并且不会消耗太多电力

  • 此服务每次都会检查附近是否有朋友。如果有,则会生成通知。您可以使用以下方法进行检查:

    public static float distBetweenTwoPoints(float lat1, float lng1,
            float lat2, float lng2) {
        // returns distance (in meters) between two points
        double earthRadius = 3958.75;
        double dLat = Math.toRadians(lat2 - lat1);
        double dLng = Math.toRadians(lng2 - lng1);
        double a = Math.sin(dLat / 2) * Math.sin(dLat / 2)
                + Math.cos(Math.toRadians(lat1))
                * Math.cos(Math.toRadians(lat2)) * Math.sin(dLng / 2)
                * Math.sin(dLng / 2);
        double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
        double dist = earthRadius * c;
    
        int meterConversion = 1609;
    
        return new Float(dist * meterConversion).floatValue();
    }
    
  • 您必须将这些位置存储在sqlite数据库中。是关于sqlite的教程

  • 对于gps跟踪,您可以参考此

  • 注意:但请确保两台设备都已启用gps

    编辑

    It can then use bluetooth and wifi strength to give the users a general idea of whether they are getting closer or farther
    
    只要您的服务检查到附近有两个朋友(在大约蓝牙范围内)。您就可以通过编程方式打开蓝牙并实现您想要做的事情。

    基本想法: 1) 在服务器中设置数据库(MySQL、SQL等),其中包含用户表和位置表,其中包含thr位置数据

    2) 在Android中,创建服务将在15分钟内启动一次,请求当前位置

    3) 创建SharedPreference/SQliteDB,其中保存设备的最后一个坐标,该坐标也已更新到服务器数据库

    4) 如果当前位置与从SharedReference和/或附近检索到的上一个位置匹配(取决于您给出的30英尺或更高的距离),则用户位于同一位置,因此不要将坐标上载到服务器数据库

    5) 如果用户不在附近,或者最后一个位置与当前位置不匹配,则将坐标上载到服务器数据库

    6) 将坐标上载到服务器后,也更新SharedReference

    7) 上传坐标后,服务器必须从其数据库返回在您附近的用户详细信息。然后,你的应用程序会知道谁在你附近,并向你发送通知说“你的好友XXX就在附近!”

    8) 在服务器中,上传您的坐标后,服务器还将使用“谷歌云消息”向您附近的用户发送通知

    9) 提示:在您的服务器上运行cron作业,该作业将每分钟执行一次,并检查“谁靠近谁”并向他们发送通知


    希望它对某人有所帮助:)

    因为你没有任何代码,所以这可能被认为是离题。你可能是被否决票的受害者,问题可能已经结束。因此,请更新你的帖子,显示你尝试过的代码或任何类型的信息,表明你在提问之前已经研究过蓝牙无法连接自动连接到任何未知或未经授权的设备,因此如果用户离您很近,您不能期望它自动连接到对方用户。它将一次连接一个设备。如果你周围有超过1个用户,那么你无法使用蓝牙跟踪他们。请添加评论。如果你投票反对,请给出解释。我还在编辑呢,非常感谢你的解释。我已经学习了这个androidhive教程,现在我有了一个基本的想法。我会尽力。我会添加更多信息。继续检查我对答案的编辑@Rachita Nanda我编辑了我的问题。现在的问题是如何在两台设备之间交换数据。你能看看我编辑的问题,帮我解决这个问题吗?你想发送什么样的数据???请为新的查询单独发布一个问题!!!!