2016-11-24 14 views
-1

SMS経由でユーザーの場所を送信しようとしています。私は、ユーザーの場所を得ることができますが、smsmanagerが場所のnull値でメッセージを送信している間、誰かが私のコードを参照するか、ここで何が間違っているか私を案内することができます。ありがとう!私はアンドロイドでSMS経由でユーザーの場所を送信したい

public class MainActivity extends AppCompatActivity { 
    public Button button; 

    private LocationManager locationManager; 
    private LocationListener listener; 
    private String gpslonla; 
    private TextView t; 


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



     button = (Button) findViewById(R.id.button); 
     button.setOnClickListener(new View.OnClickListener() { 


      @Override 
      public void onClick(View view) { 
       getlocation(); 
       sendlocationsms(); 

      } 


      private void sendlocationsms() { 
       String phoneNumber = "903399000"; 
       //Location location = new Location("dummyprovider"); 

       SmsManager smsManager = SmsManager.getDefault(); 
       StringBuffer smsBody = new StringBuffer(); 
       smsBody.append("http://maps.google.com?q="+gpslonla); 

       //smsBody.append(location.getLatitude()); 
       //smsBody.append(","); 
       //smsBody.append(location.getLongitude()); 
       smsManager.sendTextMessage(phoneNumber, null, smsBody.toString(), null, null); 
       int gravity = Gravity.CENTER; // the position of toast 
       int xOffset = 0; // horizontal offset from current gravity 
       int yOffset = 0; // vertical offset from current gravity 
       Toast toast = Toast.makeText(getApplicationContext(), "Your message has been sent ", Toast.LENGTH_SHORT); 
       toast.setMargin(50, 50); 
       toast.setGravity(gravity, xOffset, yOffset); 
       toast.show(); 

      } 

     }); 

    } 

    private void getlocation() { 

     locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 

     listener = new LocationListener() { 
      @Override 
      public void onLocationChanged(Location location) { 
       gpslonla=location.getLongitude() + "," + location.getLatitude(); 


      } 

      @Override 
      public void onStatusChanged(String s, int i, Bundle bundle) { 

      } 

      @Override 
      public void onProviderEnabled(String s) { 

      } 

      @Override 
      public void onProviderDisabled(String s) { 
       Intent i = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
       startActivity(i); 

      } 
     }; 
     configure_button(); 
    } 

    @Override 
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
     switch (requestCode) { 
      case 10: 
       configure_button(); 
       break; 
      default: 
       break; 
     } 
    } 

    void configure_button() { 
     // first check for permissions 
     if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
       requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.INTERNET} 
         , 10); 
      } 
      return; 
     } 
     // this code won't execute IF permissions are not allowed, because in the line above there is return statement. 
     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       //noinspection MissingPermission 
       locationManager.requestLocationUpdates("gps", 5000, 0, listener); 
      } 
     }); 
    } 
} 
+0

あなたはgetl​​ocation()を起動します。 sendlocationsms();同時に。 smsが送信されると同時にどのように場所を送信すると思いますか? – Stanojkovic

答えて

1

場所を受け取ったら、sendlocationsms()メソッドを呼び出す必要があります。あなたのonClickメソッドは、と変更します。

EDITED:次に

boolean needsToSendSms = false; 

falseに初期値を持つブール変数を宣言し

@Override 
    public void onClick(View view) { 
     needsToSendSms = true; 
     getlocation(); 
    } 

そして、ある場所の変更、それを呼び出しを

@Override 
    public void onLocationChanged(Location location) { 
     gpslonla=location.getLongitude() + "," + location.getLatitude(); 
     if(needsToSendSms) { 
      sendlocationsms(); 
      needsToSendSms = false; 
     } 

    } 

ブール変数を追加すると、1回のクリックで1つのSMSだけが送信されます。

こちらがお役に立てば幸いです。

+0

これはありがとうございます!メッセージを送信し続けます。無限のように! 1つのメッセージを送信したいだけです – Yash

+0

最初の値をfalseにしてneedsToSendSmsという名前のブール変数を作成し、編集した回答のようにメソッドを変更します – kelmi92

+0

編集した回答がうまくいくことを願っています。その場合は、正しい答えとして再度マークしてください。 – kelmi92

関連する問題