Android all variables are reset when SMS is sent - java

Hey I'm making an app in which I need to send a text message but every time I send the message the app opens again and all the variables are reset(I have tried to implement a system that save the variables but they still get reset), however it still sends the message. Why is it doing this, and how can I fix it; this is my code
public void sendSMS(String phono, String mes)
{
PendingIntent pi = PendingIntent.getActivity(this, 0,
new Intent(this, MainActivity.class), 0);
SmsManager sm = SmsManager.getDefault();
sm.sendTextMessage(phono, null, mes, pi, null);
}
//Button that uses method
b = (Button) findViewById(R.id.b);
b.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v)
{
phono = "personal phone number";
if (phono.length() > 0 && mes.length() > 0)
sendSMS(phono, mes);
}
});

You are asking the SMSManager to relaunch your app when the SMS is successfully sent.
From the docs,
public void sendTextMessage (String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent),
the pi in your code will be used as the sentIntent, which means when the SMS is sent out of the device, SMSManager will automatically trigger the intent.
If you don't want the SMS manager to relaunch your app again after the SMS is sent, just send a null in place of pi.
sm.sendTextMessage(phono, null, mes, null, null);

Replace sm.sendTextMessage(phono, null, mes, pi, null); with
sm.sendTextMessage(phono, null, mes, null, null);

Related

sending two intents with a press of a button

I am creating my first app and I would like to know if it is possible to have two intents linked to a single button. My goal is: when the button is pressed it sends out an SMS and then makes a call, this is the call method which works I would like to know if there is a way to hard code an SMS and have it sent when the same button is pressed?
public void phone_call(View view) {
String number = "123456789";
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:" + number));
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED){
return;
}
startActivity(intent);
}
yes, it is possible, use SmsManager
String number = "123456789";
String message = "some message";
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(number, null, message, null, null);
... rest of code and finally
startActivity(intent);
note you should have proper permission and also your app must be set as default SMS sender (only one app may send SMS, multiple apps can only receive/print them)
<uses-permission android:name="android.permission.SEND_SMS" />

Sms manager not sending messages even after permission

I had my codes sending an sms before. But it just stopped. I have given the app permissions and it still isnt working. Here are my codes below
SmsManager.getDefault().sendTextMessage("5555", null, "Hi there", null, null );
Try this code,
It works for me
SmsManager sms = SmsManager.getDefault();
PendingIntent pendingIntent;
String SENT = "SMS_SENT";
pendingIntent = PendingIntent.getBroadcast(this, 0,new Intent(SENT), 0);
sms.sendTextMessage(phoneNumber, null, message, pendingIntent, null);

Android SMS warning pop up

i'm trying to send an SMS to a short number from my code:
sendSMS("5556", "Test");
private void sendSMS(String phoneNumber, String message) {
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(phoneNumber, null, message, null, null);
}
After calling the method Android will show the next pop-up:
http://imgur.com/a/mRLYg
How can I know if the user clicked on send or cancel?
See the SmsManager API - use the PendingIntent sentIntent parameter to determine the result.

Android - Send SMS without user's assent [duplicate]

I'm rather new to Android.
Im trying to send SMS from Android application.
When using the SMS Intent the SMS window opens and the user needs to approve the SMS and send it.
Is there a way to automatically send the SMS without the user confirming it?
Thanks,
Lior
You can use this method to send an sms. If the sms is greater than 160 character then sendMultipartTextMessage is used.
private void sendSms(String phonenumber,String message, boolean isBinary)
{
SmsManager manager = SmsManager.getDefault();
PendingIntent piSend = PendingIntent.getBroadcast(this, 0, new Intent(SMS_SENT), 0);
PendingIntent piDelivered = PendingIntent.getBroadcast(this, 0, new Intent(SMS_DELIVERED), 0);
if(isBinary)
{
byte[] data = new byte[message.length()];
for(int index=0; index<message.length() && index < MAX_SMS_MESSAGE_LENGTH; ++index)
{
data[index] = (byte)message.charAt(index);
}
manager.sendDataMessage(phonenumber, null, (short) SMS_PORT, data,piSend, piDelivered);
}
else
{
int length = message.length();
if(length > MAX_SMS_MESSAGE_LENGTH)
{
ArrayList<String> messagelist = manager.divideMessage(message);
manager.sendMultipartTextMessage(phonenumber, null, messagelist, null, null);
}
else
{
manager.sendTextMessage(phonenumber, null, message, piSend, piDelivered);
}
}
}
Update
piSend and piDelivered are Pending Intent They can trigger a broadcast when the method finish sending an SMS
Here is sample code for broadcast receiver
private BroadcastReceiver receiver = new BroadcastReceiver() {
#Override
public void onReceive(Context context, Intent intent) {
String message = null;
switch (getResultCode()) {
case Activity.RESULT_OK:
message = "Message sent!";
break;
case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
message = "Error. Message not sent.";
break;
case SmsManager.RESULT_ERROR_NO_SERVICE:
message = "Error: No service.";
break;
case SmsManager.RESULT_ERROR_NULL_PDU:
message = "Error: Null PDU.";
break;
case SmsManager.RESULT_ERROR_RADIO_OFF:
message = "Error: Radio off.";
break;
}
AppMsg.makeText(SendMessagesWindow.this, message,
AppMsg.STYLE_CONFIRM).setLayoutGravity(Gravity.BOTTOM)
.show();
}
};
and you can register it using below line in your Activity
registerReceiver(receiver, new IntentFilter(SMS_SENT)); // SMS_SENT is a constant
Also don't forget to unregister broadcast in onDestroy
#Override
protected void onDestroy() {
unregisterReceiver(receiver);
super.onDestroy();
}
If your application has in the AndroidManifest.xml the following permission
<uses-permission android:name="android.permission.SEND_SMS"/>
you can send as many SMS as you want with
SmsManager manager = SmsManager.getDefault();
manager.sendTextMessage(...);
and that is all.
Yes, you can send SMS using the SmsManager. Please keep in mind that your application will need the SEND_SMS permission for this to work.
Yes, you can send sms without making user interaction...But it works, when user wants to send sms only to a single number.
try {
SmsManager.getDefault().sendTextMessage(RecipientNumber, null,
"Hello SMS!", null, null);
} catch (Exception e) {
AlertDialog.Builder alertDialogBuilder = new
AlertDialog.Builder(this);
AlertDialog dialog = alertDialogBuilder.create();
dialog.setMessage(e.getMessage());
dialog.show();
}
Also, add manifest permission....
<uses-permission android:name="android.permission.SEND_SMS"/>

How to make Proximity Alerts work even when the mobile screen is Locked?

I've created application to send Proximity Alert via SMS. SMS delivering fine. But when my phone scree is locked Proximity Alert failed to fire alert. I don't want my phone screen awake all times and i still want my app to alert even the screen is locked or sleep. Any Solutions to it.
This is my code for adding Proximity Alert in Main Activity's onCreate()
try{
databaseHelper = new DatabaseHelper(this);
db = databaseHelper.getReadableDatabase();
Cursor cursor = db.rawQuery("select rowid _id,*from latLngTable", null);
go=cursor.moveToFirst();
while (cursor.isAfterLast()!=true){
String strLat = cursor.getString(cursor.getColumnIndex("latitude"));
String strLng = cursor.getString(cursor.getColumnIndex("longitude"));
String mobileNo=cursor.getString(cursor.getColumnIndex("Phone_NO"));
double dLat = Double.parseDouble(strLat);
double dLng = Double.parseDouble(strLng);
float radius = 2000;
LocationManager locationManager2 = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager2.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
String proximitys = "com.realtech.latlngrecorder" + n;
Intent i = new Intent(proximitys);
i.putExtra("phone", mobileNo);
sendBroadcast(i);
PendingIntent pi = PendingIntent.getBroadcast(this, n, i, PendingIntent.FLAG_CANCEL_CURRENT);
locationManager2.addProximityAlert(dLat, dLng, radius, -1, pi);
IntentFilter filter = new IntentFilter(proximitys);
registerReceiver(new ProximityIntentReceiver(), filter);
Log.w("Alert Added", "Alert Added to All Locations");
Toast.makeText(MainPage.this,"Proximity Alert Added",Toast.LENGTH_SHORT).show();
n++;
cursor.moveToNext();
}
}catch (SQLiteException e){
e.printStackTrace();
Toast.makeText(MainPage.this,"Failed to add Proximity Alert",Toast.LENGTH_SHORT).show();
}
My BroadcastReceiver for proximity alert was
public void onReceive(Context context, Intent intent) {
smsNo=intent.getStringExtra("phone");
String proximityKey= LocationManager.KEY_PROXIMITY_ENTERING;
Boolean entering=intent.getBooleanExtra(proximityKey,false);
if (entering){
Log.d(getClass().getSimpleName(), "entering");
try {
SmsManager smsManager=SmsManager.getDefault();
String[] numbers=smsNo.split(",");
for (String number:numbers) {
smsManager.sendTextMessage(number, null, "School Van will reach your place in 2 mins.\n\u0bb8\u0bcd\u0b95\u0bc2\u0bb2\u0bcd \u0bb5\u0bc7\u0ba9\u0bcd \u0bb5\u0bb0\u0baa\u0bcd\u0baa\u0bcb\u0b95\u0bbf\u0bb1\u0ba4\u0bc1.", null, null);
}
}catch (Exception e) {
Toast.makeText(context, "No Mobile Number", Toast.LENGTH_SHORT).show();
}
}else {
Log.d(getClass().getSimpleName(), "exiting");
Toast.makeText(context,"exiting",Toast.LENGTH_SHORT).show();
}
}
And another thing if i restart the app the event fires again.
Please help me to run my app always in background even if the user closes it. Thank you.

Categories