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

时间:2017-08-05 06:02:14

标签: android android-gps android-sms

我正在尝试构建一个应用程序,我通过短信分享我的位置。在class MyPublishRelay<I> : Consumer<I> { private val subject: Subject<I> = PublishSubject.create<I>() override fun accept(intent: I) = subject.onNext(intent) fun subscribe(): Disposable = subject.subscribe() fun subscribe(c: Consumer<in I>): Disposable = subject.subscribe(c) //.. OTHER SUBSCRIBE OVERLOADS } 我有一个activity和一个button。点击TextView后,button会被发送到指定的号码。问题是,一旦我点击text messagebutton发送不会停止,除非我卸载应用程序。它一次发送大约30-40条短信。代码如下:

Gps4Activity.java

message

任何人都可以建议一种方法来检查发送的邮件数量。我只想在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 message

谢谢:)

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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);
    }
}

答案 2 :(得分: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();
//                }

            }
        });
    }