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();
// }
}
});
}
我正在尝试构建一个可以通过短信分享我的位置的应用程序。在 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();
// }
}
});
}