Android- 单击按钮时消息发送不会停止

Android- On clicking button the message sending does not stop

我正在尝试构建一个可以通过短信分享我的位置的应用程序。在 activity 我有一个 button 和一个 TextView。单击 button 后,text message 将发送到提供的指定号码。问题是一旦我点击 button,除非我卸载应用程序,否则 message 发送不会停止。它一次发送大约 30-40 条短信。代码如下:

Gps4Activity.java

public class Gps4Activity extends AppCompatActivity implements
    GoogleApiClient.OnConnectionFailedListener {

private static final String LOG_TAG = "PlacesAPIActivity";
private static final int GOOGLE_API_CLIENT_ID = 0;
private GoogleApiClient mGoogleApiClient;
private static final int PERMISSION_REQUEST_CODE = 100;
private static final int MY_PERMISSIONS_REQUEST_SEND_SMS =0 ;
private TextView display1,display2,display3,display4,display5;
private Button button;
String number="+91xxxxxxxxxx";
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_gps4);
    button=(Button)findViewById(R.id.showL);
    display1=(TextView)findViewById(R.id.location2);
    display2=(TextView)findViewById(R.id.location3);
    display3=(TextView)findViewById(R.id.location4);
    display4=(TextView)findViewById(R.id.location5);
    display5=(TextView)findViewById(R.id.location6);

    mGoogleApiClient = new GoogleApiClient.Builder(Gps4Activity.this)
            .addApi(Places.PLACE_DETECTION_API)
            .enableAutoManage(this, GOOGLE_API_CLIENT_ID, this)
            .build();

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (mGoogleApiClient.isConnected()) {
                if (ActivityCompat.checkSelfPermission(Gps4Activity.this,
                        android.Manifest.permission.ACCESS_FINE_LOCATION)
                        != PackageManager.PERMISSION_GRANTED) {
                    ActivityCompat.requestPermissions(Gps4Activity.this,
                            new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION},
                            PERMISSION_REQUEST_CODE);
                    ActivityCompat.requestPermissions(Gps4Activity.this,
                            new String[]{Manifest.permission.SEND_SMS},
                            MY_PERMISSIONS_REQUEST_SEND_SMS);
                } else {
                    callPlaceDetectionApi();
                }

            }
        }
    });
}

@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
    Log.e(LOG_TAG, "Google Places API connection failed with error code: "
            + connectionResult.getErrorCode());

    Toast.makeText(this,
            "Google Places API connection failed with error code:" +
                    connectionResult.getErrorCode(),
            Toast.LENGTH_LONG).show();
}

@Override
public void onRequestPermissionsResult(int requestCode,
                                       String permissions[], int[] grantResults) {
    switch (requestCode) {
        case PERMISSION_REQUEST_CODE:
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                callPlaceDetectionApi();
            } else {
                Toast.makeText(getApplicationContext(),
                        "SMS faild, please try again.", Toast.LENGTH_LONG).show();
                return;
            }
            break;

    }
}

private void callPlaceDetectionApi() throws SecurityException {
    PendingResult<PlaceLikelihoodBuffer> result = Places.PlaceDetectionApi
            .getCurrentPlace(mGoogleApiClient, null);
    result.setResultCallback(new ResultCallback<PlaceLikelihoodBuffer>() {
        @Override
        public void onResult(PlaceLikelihoodBuffer likelyPlaces) {
            for (PlaceLikelihood placeLikelihood : likelyPlaces) {
                Log.i(LOG_TAG, String.format("Place '%s' with " +
                                "likelihood: %g",
                        placeLikelihood.getPlace().getName(),
                        placeLikelihood.getLikelihood()));
display2.setText(placeLikelihood.getPlace().getAddress().toString());
SmsManager smsManager = SmsManager.getDefault();
                smsManager.sendTextMessage(number, null, placeLikelihood.getPlace().getAddress().toString(),
                        null, null);
                Toast.makeText(getApplicationContext(), "SMS sent.",
                        Toast.LENGTH_LONG).show();
            }
            likelyPlaces.release();
        }
    });
}
}

任何人都可以建议一种方法来检查发送的邮件数量。我只想在 button 点击时发送一个 text message

谢谢:)

使用以下功能只发送一个号码的短信;

 private void sendMySMS(String personalPhone, String messege)
{
    SmsManager sms = SmsManager.getDefault();
    List<String> messages = sms.divideMessage(messege);
    for (String msg : messages)
    {
        PendingIntent sentIntent = PendingIntent.getBroadcast(getActivity(), 0, new Intent("SMS_SENT"), 0);
        PendingIntent deliveredIntent = PendingIntent.getBroadcast(getActivity(), 0, new Intent("SMS_DELIVERED"), 0);
        sms.sendTextMessage(personalPhone, null, msg, sentIntent, deliveredIntent);
    }
}

我认为这是因为 likelyPlaces 可以包含很多地方,并且您将 sms 方法放在 likelyPlaces 循环中。因此,它将为每个 likelyPlaces 数据发送短信。如果包含40个地方,则发送40次。

您正在向多个地方发送消息,相反,您可以选择最佳匹配并只发送一条这样的消息,或者在发送消息后打破循环。

    private void callPlaceDetectionApi() throws SecurityException {
        PendingResult<PlaceLikelihoodBuffer> result = Places.PlaceDetectionApi
                .getCurrentPlace(mGoogleApiClient, null);
        result.setResultCallback(new ResultCallback<PlaceLikelihoodBuffer>() {
            @Override
            public void onResult(PlaceLikelihoodBuffer likelyPlaces) {
                //Edited
                for (PlaceLikelihood placeLikelihood : likelyPlaces) {
                    Log.i(LOG_TAG, String.format("Place '%s' with " +
                                    "likelihood: %g",
                            placeLikelihood.getPlace().getName(),
                            placeLikelihood.getLikelihood()));
                    display2.setText(placeLikelihood.getPlace().getAddress().toString());
                    SmsManager smsManager = SmsManager.getDefault();
                    smsManager.sendTextMessage(number, null, placeLikelihood.getPlace().getAddress().toString(),
                            null, null);
                    Toast.makeText(getApplicationContext(), "SMS sent.",
                            Toast.LENGTH_LONG).show();
                    break;
                }
                likelyPlaces.release();
//                if(likelyPlaces != null && likelyPlaces.get(0) != null) {
//                    PlaceLikelihood placeLikelihood = likelyPlaces.get(0);
//                    Log.i(LOG_TAG, String.format("Place '%s' with " +
//                                    "likelihood: %g",
//                            placeLikelihood.getPlace().getName(),
//                            placeLikelihood.getLikelihood()));
//                    display2.setText(placeLikelihood.getPlace().getAddress().toString());
//                    SmsManager smsManager = SmsManager.getDefault();
//                    smsManager.sendTextMessage(number, null, placeLikelihood.getPlace().getAddress().toString(),
//                            null, null);
//                    Toast.makeText(getApplicationContext(), "SMS sent.",
//                            Toast.LENGTH_LONG).show();
//                    likelyPlaces.release();
//                }

            }
        });
    }