1 |
package dk.thoerup.smssend; |
package dk.thoerup.smssend; |
2 |
|
|
3 |
|
import java.io.ByteArrayOutputStream; |
4 |
|
import java.io.IOException; |
5 |
|
import java.io.InputStream; |
6 |
|
import java.io.OutputStream; |
7 |
|
import java.net.HttpURLConnection; |
8 |
import java.net.URL; |
import java.net.URL; |
9 |
import java.net.URLConnection; |
import java.net.URLConnection; |
10 |
|
import java.net.URLDecoder; |
11 |
import java.net.URLEncoder; |
import java.net.URLEncoder; |
12 |
import java.util.ArrayList; |
import java.util.ArrayList; |
13 |
|
import java.util.HashMap; |
14 |
|
import java.util.Map; |
15 |
|
|
|
import android.R.bool; |
|
16 |
import android.app.Activity; |
import android.app.Activity; |
17 |
|
import android.app.ProgressDialog; |
18 |
import android.content.Intent; |
import android.content.Intent; |
19 |
import android.content.SharedPreferences; |
import android.content.SharedPreferences; |
20 |
|
import android.os.AsyncTask; |
21 |
import android.os.Bundle; |
import android.os.Bundle; |
22 |
import android.provider.ContactsContract; |
import android.provider.ContactsContract; |
23 |
import android.telephony.SmsManager; |
import android.telephony.SmsManager; |
43 |
final int OPTIONS_SETTINGS = 1000; |
final int OPTIONS_SETTINGS = 1000; |
44 |
|
|
45 |
final int LOOKUP_PHONENR = 2000; |
final int LOOKUP_PHONENR = 2000; |
46 |
|
|
47 |
|
|
48 |
@Override |
@Override |
49 |
public void onCreate(Bundle savedInstanceState) { |
public void onCreate(Bundle savedInstanceState) { |
167 |
OnClickListener sendListener = new OnClickListener() { |
OnClickListener sendListener = new OnClickListener() { |
168 |
@Override |
@Override |
169 |
public void onClick(View v) { |
public void onClick(View v) { |
170 |
Spinner method = (Spinner) findViewById(R.id.method); |
SendWorker worker = new SendWorker(); |
171 |
int sel = method.getSelectedItemPosition(); |
worker.execute(); |
|
|
|
|
boolean ret = false; |
|
|
|
|
|
switch (sel) { |
|
|
case 0: |
|
|
ret = sendInternal(); |
|
|
break; |
|
|
case 1: |
|
|
ret = sendCoolSms(); |
|
|
break; |
|
|
case 2: |
|
|
ret = sendSmsDaemon(); |
|
|
break; |
|
|
|
|
|
} |
|
|
|
|
|
String msg = "Done!"; |
|
|
if (ret == false) |
|
|
msg = "failed!"; |
|
|
|
|
|
Toast.makeText(SmsSend.this, msg, Toast.LENGTH_LONG).show(); |
|
|
|
|
172 |
} |
} |
173 |
}; |
}; |
174 |
|
|
218 |
|
|
219 |
for (int i=0; i<count; i++) { |
for (int i=0; i<count; i++) { |
220 |
sms.sendMultipartTextMessage(to, null, parts, null, null); |
sms.sendMultipartTextMessage(to, null, parts, null, null); |
221 |
|
sleep(5000); //give the phone some time to send the message |
222 |
} |
} |
223 |
|
|
224 |
return true; |
return true; |
225 |
} |
} |
226 |
|
|
227 |
|
void sleep(int s) { |
228 |
|
try { |
229 |
|
Thread.sleep(s); |
230 |
|
} catch (InterruptedException e) { |
231 |
|
Log.e("SmsSend", "Sleep interrupted", e); |
232 |
|
} |
233 |
|
} |
234 |
|
|
235 |
boolean isNumeric(String str) { |
boolean isNumeric(String str) { |
236 |
for (int i=0; i<str.length(); i++) { |
for (int i=0; i<str.length(); i++) { |
237 |
char c = str.charAt(i); |
char c = str.charAt(i); |
242 |
return true; |
return true; |
243 |
} |
} |
244 |
|
|
245 |
String encode(String url) { |
|
|
try { |
|
|
return URLEncoder.encode(url, "UTF-8"); |
|
|
} catch (Exception e) { |
|
|
return url; |
|
|
} |
|
|
} |
|
246 |
|
|
247 |
boolean sendCoolSms() { |
boolean sendCoolSms() { |
248 |
SharedPreferences prefs = this.getSharedPreferences("SmsSend", MODE_PRIVATE); |
SharedPreferences prefs = this.getSharedPreferences("SmsSend", MODE_PRIVATE); |
260 |
} |
} |
261 |
|
|
262 |
//"http://sms.coolsmsc.dk:8080/?username=%s&password=%s&to=%s&from=SMS+HTTP+GW&message=hello+world" |
//"http://sms.coolsmsc.dk:8080/?username=%s&password=%s&to=%s&from=SMS+HTTP+GW&message=hello+world" |
|
StringBuilder sb = new StringBuilder(); |
|
|
sb.append("http://sms.coolsmsc.dk:8080/"); |
|
|
sb.append("?username=").append(user); |
|
|
sb.append("&password=").append(pass); |
|
|
sb.append("&to=").append( getTo() ); |
|
|
sb.append("&from=").append( encode(getFrom()) ); |
|
|
sb.append("&message=").append( encode(getMessage()) ); |
|
263 |
|
|
264 |
Log.v("SmsSend", sb.toString()); |
String url = "http://sms.coolsmsc.dk:8080/"; |
265 |
|
|
266 |
|
Map<String,String> params = new HashMap<String,String>(); |
267 |
|
params.put("username", user); |
268 |
|
params.put("password", pass); |
269 |
|
params.put("to", getTo()); |
270 |
|
params.put("from", getFrom()); |
271 |
|
params.put("message", getMessage() ); |
272 |
|
params.put("resulttype", "urlencoded" ); |
273 |
|
params.put("lang", "lang" ); |
274 |
|
|
275 |
|
String paramStr = HttpUtil.encodeParams(params); |
276 |
|
|
277 |
|
Log.v("SmsSend", paramStr); |
278 |
|
|
279 |
|
|
280 |
|
boolean success = false; |
281 |
|
String msg = ""; |
282 |
try { |
try { |
283 |
URL u = new URL( sb.toString() ); |
byte bytes[] = HttpUtil.postContent(url, paramStr, 2500 ); |
284 |
URLConnection conn = u.openConnection(); |
String res = new String(bytes); |
285 |
conn.getInputStream(); |
Map<String,String> vals = HttpUtil.decodeParams(res); |
|
|
|
286 |
|
|
287 |
|
success = vals.get("status").equals("success"); |
288 |
|
msg = vals.get("result"); |
289 |
|
|
290 |
} catch (Exception e) { |
} catch (Exception e) { |
291 |
Log.e("SmsSend", "sendCoolSms", e); |
Log.e("SmsSend", "sendCoolSms", e); |
292 |
return false; |
success = false; |
293 |
} |
} |
294 |
|
|
295 |
return true; |
return success; |
296 |
} |
} |
297 |
|
|
298 |
boolean sendSmsDaemon() { |
boolean sendSmsDaemon() { |
299 |
|
|
300 |
int count = getCount(); |
int count = getCount(); |
311 |
|
|
312 |
return true; |
return true; |
313 |
} |
} |
314 |
|
|
315 |
|
|
316 |
|
|
317 |
|
|
318 |
OnItemSelectedListener methodSelected = new OnItemSelectedListener() { |
OnItemSelectedListener methodSelected = new OnItemSelectedListener() { |
319 |
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { |
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { |
341 |
|
|
342 |
} |
} |
343 |
}; |
}; |
344 |
|
|
345 |
|
class SendWorker extends AsyncTask<Void, Void, Void> { |
346 |
|
|
347 |
|
boolean ret; |
348 |
|
ProgressDialog dlg; |
349 |
|
|
350 |
|
@Override |
351 |
|
protected void onPreExecute() { |
352 |
|
super.onPreExecute(); |
353 |
|
|
354 |
|
dlg = new ProgressDialog(SmsSend.this); |
355 |
|
dlg.setMessage( "Sending" ); |
356 |
|
dlg.setCancelable(true); |
357 |
|
dlg.show(); |
358 |
|
|
359 |
|
ret = false; |
360 |
|
} |
361 |
|
|
362 |
|
@Override |
363 |
|
protected Void doInBackground(Void... params) { |
364 |
|
Spinner method = (Spinner) findViewById(R.id.method); |
365 |
|
int sel = method.getSelectedItemPosition(); |
366 |
|
|
367 |
|
|
368 |
|
switch (sel) { |
369 |
|
case 0: |
370 |
|
ret = sendInternal(); |
371 |
|
break; |
372 |
|
case 1: |
373 |
|
ret = sendCoolSms(); |
374 |
|
break; |
375 |
|
case 2: |
376 |
|
ret = sendSmsDaemon(); |
377 |
|
break; |
378 |
|
|
379 |
|
} |
380 |
|
|
381 |
|
return null; |
382 |
|
} |
383 |
|
|
384 |
|
@Override |
385 |
|
protected void onPostExecute(Void result) { |
386 |
|
dlg.dismiss(); |
387 |
|
dlg = null; |
388 |
|
|
389 |
|
String msg = "Done!"; |
390 |
|
if (ret == false) |
391 |
|
msg = "failed!"; |
392 |
|
|
393 |
|
Toast.makeText(SmsSend.this, msg, Toast.LENGTH_LONG).show(); |
394 |
|
} |
395 |
|
|
396 |
|
} |
397 |
|
|
|
} |
|
398 |
|
} |