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 دقیقه یکبار اتفاق بیفتد
فرمت فایل ارسالی به ایمیل تکست باشد
پیشاپیش تشکر
در حال تحقیق برای نوشتن برنامه ای بودم تا اس ام اس هایی که دریافت می کنم
را درایمیل شخصیم آپلود کند.
برای دسترسی به 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 دقیقه یکبار اتفاق بیفتد
فرمت فایل ارسالی به ایمیل تکست باشد
پیشاپیش تشکر