Проблема возникает при отправке местоположения через сообщение - PullRequest
1 голос
/ 07 марта 2019

Я хочу отправить местоположение с помощью сообщения, но иногда оно отправляет сообщение, иногда отправляет пустую строку, а иногда не отправляет.

Это нажатие кнопки, которую я хочуотправить сообщение Получателю, используя текущее местоположение

     b.setOnClickListener(new View.OnClickListener() {
                String loc;
                @Override
                public void onClick(View view) {
                    arrno[0]=num1;
                    arrno[1]=num2;
                    arrno[2]=num3;
                    arrno[3]=num4;

                    requestpermisson();
                    for (int i = 0; i < arrno.length; i++) {
*here the getter data is stored in the loc String* 
                        loc=getMyLocation();
                        sendSMS(arrno[i], "I am in trouble :\n"+"My current Address :"+loc);

                    }

Это просто, чтобы показать сообщение текущего местоположения и номера мобильных телефонов для тестирования

problem is that I get the location   and it sends the SMS with location and sometimes I get a null string and sometimes it does not send

SMS (возможно из-за превышения лимита сообщений)

                    Toast.makeText(getApplicationContext(), "" + num1 + "" + num2 + "" + num3 + "" + num4+" " +loc , Toast.LENGTH_LONG).show();
                }
            });



            locationManager =(LocationManager) this.getSystemService(Context.LOCATION_SERVICE);

            locationListener=new LocationListener() {
                @Override
                public void onLocationChanged(Location location) {

                    if(location!=null) {
                        Geocoder geocoder = new Geocoder(getApplicationContext(), Locale.getDefault());
                        try {
                            List<Address> listAddresses = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 1);


                            if (listAddresses != null && listAddresses.size() > 0) {
                                String address = "";

                                if (listAddresses.get(0).getAddressLine(0) != null) {
                                    address += listAddresses.get(0).getAddressLine(0) + " ";
                                }

                                if (listAddresses.get(0).getAddressLine(1) != null) {
                                    address += listAddresses.get(0).getAddressLine(1) + " ";

                                }

                                if (listAddresses.get(0).getAdminArea() != null) {
                                    address += listAddresses.get(0).getAdminArea() + " ";
                                }

                                if (listAddresses.get(0).getLocality() != null) {
                                    address += listAddresses.get(0).getLocality() + " ";
                                }





                                // this will show you your current address
                                Toast.makeText(MainActivity.this, address, Toast.LENGTH_SHORT).show();

                                setMyLocation(address);


                            }


                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                    else
                    {
                        Toast.makeText(context, "no location found", Toast.LENGTH_SHORT).show();


                    }


                }

                @Override
                public void onStatusChanged(String provider, int status, Bundle extras) {

                }

                @Override
                public void onProviderEnabled(String provider) {

                }

                @Override
                public void onProviderDisabled(String provider) {

                }
            };






            if(ContextCompat.checkSelfPermission(this,Manifest.permission.ACCESS_FINE_LOCATION)!=PackageManager.PERMISSION_GRANTED)
            {
                ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.ACCESS_FINE_LOCATION},1);


            }
            else
            {
                locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
            }








        }

        private static final int MY_PERMISSIONS_REQUEST_SEND_SMS = 1;

Это для запроса разрешения

        public void requestpermisson() {
            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);
                }
            }
        }






 @Override
        public void onRequestPermissionsResult(int requestCode, @NonNull             String[] permissions, @NonNull int[] grantResults) {
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                if(ContextCompat.checkSelfPermission(this,Manifest.permission.ACCESS_FINE_LOCATION)==PackageManager.PERMISSION_GRANTED) {

                locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
                }
            }

        }

Этофункция для отправки смс

        public void sendSMS(String phoneno, String msg){
            Toast.makeText(getApplicationContext(),"In show m",Toast.LENGTH_SHORT).show();

            try{
                SmsManager smsManager=SmsManager.getDefault();
                smsManager.sendTextMessage(phoneno,null,msg,null,null);
                Toast.makeText(getApplicationContext(),"message has been send to " +phoneno,Toast.LENGTH_SHORT).show();
            }
            catch (Exception ex){
                Toast.makeText(getApplicationContext(),"sms not sent",Toast.LENGTH_SHORT).show();
            }
        }
...