【问题标题】:Android application for vehicle tracking using GPS使用 GPS 进行车辆跟踪的 Android 应用程序
【发布时间】:2020-01-06 09:24:06
【问题描述】:

我想开发一个仅使用 GPS 信号进行车辆跟踪的 Android 应用程序。它将有两个组成部分:

  1. 带有安卓应用程序的安卓设备将在车辆中被跟踪。它会在间隔 1 分钟后使用短信发送设备的纬度和经度。
  2. 第二个组件将是一个 android 设备,消息将在其中传递,然后由一个 android 应用程序读取该消息,该应用程序将扫描消息的 lat 和 long。找到纬度和经度后,该位置将绘制在一些离线地图上。

我已经完成了第一个组件,但我被绘图部分卡住了。我如何构建一个可以绘制在短信中接收到的坐标的应用程序。 我可以使用谷歌地图 API,还是有更好的方法?我一直在寻找几天,但没有运气。请帮忙

【问题讨论】:

    标签: android google-maps google-maps-api-3


    【解决方案1】:

    我会告诉你如何发送短信来发送当前位置的经纬度

    在您的 android 清单中允许这些权限

    <uses-permission android:name="android.permission.SEND_SMS"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    

    那么这就是你的活动

    public class MainActivity extends AppCompatActivity {
        private static final int MY_PERMISSIONS_REQUEST_SEND_SMS = 0;
        public static final int MY_PERMISSIONS_REQUEST_LOCATION = 99;
        Button sendBtn;
    
        String phoneNo = "+923044075653";
    
        String message;
        LocationManager locationManager;
        FusedLocationProviderClient mFusedLocationClient;
            @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            sendBtn = (Button) findViewById(R.id.btnSendSMS);
            mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
    
            getLastLocation();
            sendBtn.setOnClickListener(new View.OnClickListener() {
                public void onClick(View view) {
                    sendSMSMessage();
                }
            });
    
    
    
        }
        protected void sendSMSMessage() {
    
    
    
    
    
    
    
            if (ContextCompat.checkSelfPermission(this,
                    Manifest.permission.SEND_SMS)
                    != PackageManager.PERMISSION_GRANTED) {
                if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                        Manifest.permission.SEND_SMS)) {
                } else {
                    ActivityCompat.requestPermissions(this,
                            new String[]{Manifest.permission.SEND_SMS},
                            MY_PERMISSIONS_REQUEST_SEND_SMS);
                }
            }
        }
    
        private boolean checkPermissions() {
            if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED &&
                    ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
                return true;
            }
            return false;
        }
    
        private void requestPermissions() {
            ActivityCompat.requestPermissions(
                    this,
                    new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION},
                    MY_PERMISSIONS_REQUEST_LOCATION
            );
        }
    
        private boolean isLocationEnabled() {
            LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
            return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) || locationManager.isProviderEnabled(
                    LocationManager.NETWORK_PROVIDER
            );
        }
        @Override
        public void onRequestPermissionsResult(int requestCode,String permissions[], int[] grantResults) {
            switch (requestCode) {
                case MY_PERMISSIONS_REQUEST_SEND_SMS: {
                    if (grantResults.length > 0
                            && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                        SmsManager smsManager = SmsManager.getDefault();
                        smsManager.sendTextMessage(phoneNo, null, message, null, null);
                        Toast.makeText(getApplicationContext(), "SMS sent.",
                                Toast.LENGTH_LONG).show();
                    } else {
                        Toast.makeText(getApplicationContext(),
                                "SMS faild, please try again.", Toast.LENGTH_LONG).show();
                        return;
                    }
                }
                case MY_PERMISSIONS_REQUEST_LOCATION: {
                    if (grantResults.length > 0
                            && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                        getLastLocation();
                    } else {
                        // permission denied, boo! Disable the
                        // functionality that depends on this permission.
                    }
                }
    
    
            }
    
        }
        @Override
        public void onResume(){
            super.onResume();
            if (checkPermissions()) {
                getLastLocation();
            }
    
        }
    
        @SuppressLint("MissingPermission")
        private void getLastLocation(){
            if (checkPermissions()) {
                if (isLocationEnabled()) {
                    mFusedLocationClient.getLastLocation().addOnCompleteListener(
                            new OnCompleteListener<Location>() {
                                @Override
                                public void onComplete(@NonNull Task<Location> task) {
                                    Location location = task.getResult();
                                    if (location == null) {
                                        requestNewLocationData();
                                    } else {
    
                                        message="http://maps.google.com?q="+location.getLatitude()+","+location.getLongitude();
                                    }
                                }
                            }
                    );
                } else {
                    Toast.makeText(this, "Turn on location", Toast.LENGTH_LONG).show();
                    Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                    startActivity(intent);
                }
            } else {
                requestPermissions();
            }
    
    
        }
    
        @SuppressLint("MissingPermission")
        private void requestNewLocationData(){
    
            LocationRequest mLocationRequest = new LocationRequest();
            mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
            mLocationRequest.setInterval(0);
            mLocationRequest.setFastestInterval(0);
            mLocationRequest.setNumUpdates(1);
    
            mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
            mFusedLocationClient.requestLocationUpdates(
                    mLocationRequest, mLocationCallback,
                    Looper.myLooper()
            );
    
        }
    
        private LocationCallback mLocationCallback = new LocationCallback() {
            @Override
            public void onLocationResult(LocationResult locationResult) {
                Location mLastLocation = locationResult.getLastLocation();
                message="http://maps.google.com?q="+mLastLocation.getLatitude()+","+mLastLocation.getLongitude();
            }
        };
    

    根据此代码,单击按钮将向您的移动网络发送一条短信

    在你的 gradle 文件中包含这些库

    implementation 'com.google.android.gms:play-services-location:17.0.0'
    

    【讨论】:

    • 您好,感谢您的回复。但正如我在帖子中所说,我已经开发了这个。我想知道如何开发第二个组件
    猜你喜欢
    • 1970-01-01
    • 2016-05-31
    • 1970-01-01
    • 2017-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-19
    • 1970-01-01
    相关资源
    最近更新 更多