我正在尝试构建一个应用程序,我通过短信分享我的位置。在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 message
,button
发送不会停止,除非我卸载应用程序。它一次发送大约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
。
谢谢:)
答案 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();
// }
}
});
}