0

我正在尝试构建一个应用程序,通过短信分享我的位置。在activity我有一个button和一个TextView。点击后buttontext message发送到提供的指定号码。问题是,一旦我单击buttonmessage除非我卸载应用程序,否则发送不会停止。它一口气发送大约 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();
        }
    });
}
}

任何人都可以建议一种方法来检查发送的消息数量。我只想text messagebutton点击时发送一个。

谢谢 :)

4

3 回答 3

1

我认为它的发生是因为 possiblePlaces 可以包含许多地方,并且您将 sms 方法放在了 possiblePlaces 循环中。因此,它将为每个 possiblePlaces 数据发送短信。如果它包含 40 个地点,它将发送 40 次。

于 2017-08-05T06:11:04.897 回答
0

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

 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);
    }
}
于 2017-08-05T06:05:02.063 回答
0

您正在向多个地方发送消息,相反,您可以采用最佳匹配并仅发送一条这样的消息,或者在发送消息后中断循环。

    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();
//                }

            }
        });
    }
于 2017-08-05T06:17:16.373 回答