انجمن سایت کلیدستان



مشکل در ذخیره سازی پیامک با استفاده از Broadcast Reciever (در برنامه نویسی اندروید)زمان کنونی: ۱۳۹۵/۰۹/۱۳، ۱۱:۱۶ ق.ظ
کاربران در حال بازدید این موضوع: 1 مهمان
نویسنده: a-l-mahdi
آخرین ارسال: a-l-mahdi
پاسخ 7
بازدید 1495

رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
مشکل در ذخیره سازی پیامک با استفاده از Broadcast Reciever (در برنامه نویسی اندروید)

مشکل در ذخیره سازی پیامک با استفاده از Broadcast Reciever (در برنامه نویسی اندروید)

#1
سلام
میخواستم ببینم راهی برای ذخیره سازی پیامکهایی که با استفاده از Broadcast Reciever دریافت میشه هست؟
چون من هر کار کردم که تو یه دیتابیس ذخیره کنم نشد...!
لطفا راهنمایی بفرمایید خیلی واجبه....
ممنون......
پاسخ

مشکل در ذخیره سازی پیامک با استفاده از Broadcast Reciever (در برنامه نویسی اندروید)

#2
خب شما وقتی پیام میگیرید،داخل یک رشته میخوابونید و بعدش وارد فیلد دیتابیس میکنید...اگر کار با دیتابیس بلدید..
شما کدتون بزنید مشکل داشتید مطرح کنید داخل انجمن،چون انجمن فقط به مشکلات رسیدگی میکنه...نه ارائه کد
موفق باشید
پاسخ
 سپاس شده توسط admin

مشکل در ذخیره سازی پیامک با استفاده از Broadcast Reciever (در برنامه نویسی اندروید)

#3
دوست عزیز
وقتی کد مربوط به دیتابیس رو داخل یک Broadcast Reciever وارد میکنم ایراد میگیره و لی داخل یک اکتیویتی میزنم مشکل نداره:
مثلا کد زیر رو وارد کلاس زیر کردم:

کد پی‌اچ‌پی:
String DATABASE_NAME "KELIDESTAN.db";    
String TABLE_NAME "MY_TABLE";      
try{
    
SQLiteDatabase mydb openOrCreateDatabase(DATABASE_NAMEContext.MODE_PRIVATE,null);
    
mydb.execSQL("CREATE TABLE IF  NOT EXISTS "TABLE_NAME +" (ID INTEGER PRIMARY KEY, NAME TEXT, CITY TEXT);");
    
mydb.close();
}catch(
Exception e){
    
Toast.makeText(getApplicationContext(), "Error in creating table"Toast.LENGTH_LONG).show();

کد پی‌اچ‌پی:
public class BroadcastReceiver extends BroadcastReceiver {

         
String DATABASE_NAME "KELIDESTAN.db";    
         
String TABLE_NAME "MY_TABLE";   
    
    
Context c;
    
    final 
SmsManager sms SmsManager.getDefault();
    
    
    
    public 
void onReceive(Context contextIntent intent) {
        
        
        final 
Bundle bundle intent.getExtras();
        
         

        try {
            
            if (
bundle != null) {
                
                final 
Object pdusObj = (Object) bundle.get("pdus");
                
                for (
int i 0pdusObj.lengthi++) {
                    
                    
SmsMessage currentMessage SmsMessage.createFromPdu((bytepdusObj[i]);
                    
String phoneNumber currentMessage.getDisplayOriginatingAddress();
                    
                      
String senderNum phoneNumber;
                    
String message currentMessage.getDisplayMessageBody();
                    
                    
   
                try{
                      
SQLiteDatabase mydb openOrCreateDatabase(DATABASE_NAMEContext.MODE_PRIVATE,null);
                      
mydb.execSQL("CREATE TABLE IF  NOT EXISTS "TABLE_NAME +" (ID INTEGER PRIMARY KEY, NAME TEXT, CITYTEXT);");
                      
mydb.close();
                    }catch(
Exception e){
                     
Toast.makeText(getApplicationContext(), "Error in creating table"Toast.LENGTH_LONG).show();
                    }
                    
                

                    
Log.i("SmsReceiver""senderNum: "senderNum "; message: " message);
                    
                   if (
senderNum.equals("5556")) {abortBroadcast();} 
                    
                    
int duration Toast.LENGTH_LONG;
                    
Toast toast Toast.makeText(context"senderNum: "senderNum ", message: " messageduration);
                    
toast.show();
                    
                    
                    
                    
                    
                } 
              } 

        } catch (
Exception e) {
            
Log.e("SmsReceiver""Exception smsReceiver" +e);
            
        }
    }

    
    


حالا اگه من خط اول کد بالا یعنی:

کد پی‌اچ‌پی:
[i]public class BroadcastReceiver extends BroadcastReceiver[/i


رو تبدیل به :

کد پی‌اچ‌پی:
[i]public class BroadcastReceiver extends Activity[/i


کنم دیگه ایراد نمیگیره ولی بجاش دیگه سرویس نیست که پیام دریافت کنه.
ممنون.....

 
پاسخ

مشکل در ذخیره سازی پیامک با استفاده از Broadcast Reciever (در برنامه نویسی اندروید)

#4
سلام.
در کل، در کلاس هایی (Class) غیر از Activity (مثل Service یا BroadcastReceiver یا ...)، ممکن است که کدهای رایج مربوط به Activity عمل نکنند. در خیلی از موارد، تنها باید Context مربوط به Activity به کلاس مورد نظر ارسال شده و مورد استفاده قرار بگیرد (قبل از method ذکر شود). 
در این مورد، اینجا صحبت شده :

http://www.kelidestan.com/forum/showthread.php?tid=4811

همچنین گاهی هم هست که اصلا باید ساختار کدها را متفاوت بنویسیم (کلید شماره 2858 ، البته این کلید، در مورد Thread هست، ولی مثال خوبی برای ساختار متفاوت کدنویسی می باشد). بنابراین شما ببینید که از کدام خط از کدها، خطا می گیرد و متن خطا چیست و سپس بر اساس آن می توانید با جستجو در اینترنت، کد مناسب را بیابید (یا با ذکر Context ، مشکل را برطرف کنید).



 
bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ

مشکل در ذخیره سازی پیامک با استفاده از Broadcast Reciever (در برنامه نویسی اندروید)

#5
آقا کدهای myTread رو دقیقا کجا باید نوشت
میشه تو یه اکتیویتی دیگه بجز Main نوشت...
پاسخ

مشکل در ذخیره سازی پیامک با استفاده از Broadcast Reciever (در برنامه نویسی اندروید)

#6
ما فرض میکنیم که کد ساختار درستی داره بنابر گفته خودتون...
ببینید بزارید اول یه دیدی از Context بدم.
Contextاگه بخوایم یه جورایی تعریفش کنیم..یه ظرفی یا فضای ابری یا هرچیزی دیگه ...هست.که وهله های این شی از کلاس ،جهت نمایش یک ارجاع به برنامه اندرویدی است

شما وقتی کلاستون ارث بری میکنه ازActivity ،در واقع چون خوده اکتیویتی هم ارث بری میکنه از کلاس Context ،پس یه جورایی شما ارث بری میکنید از کلاس Context
پس بخاطر همین هست شما میتونید داخل برنامه از متدهایی که فقط در این فضا شناخته شده اند استفاده کنید
مثل دستور

کد پی‌اچ‌پی:
openOrCreateDatabase(DATABASE_NAMEContext.MODE_PRIVATE,null); 

که این دستور فقط در فضای ابری گونه Context قابل استفاده است..
خب راه حل چیه؟
اندروید واسه استفاده از این متده ها راه حل گذاشته..با تعریف کردن شی از کلاس Context میتونید از متدها استفاده کنید.
در BroadCast  به متد OnRecive دقت کنید.

کد پی‌اچ‌پی:
public void onReceive(Context contextIntent intent) { 

آرگومان اول شی از کانتکس است ..که با استفاده ازاین آرگومان Context شما میتونید به متدهای داخل فضای ابری Context دسترسی داشته باشید..
پس کافیه یه متغییر سراسری در سطح کلاس تعریف کنید مثل

کد پی‌اچ‌پی:
Context Base_context

بعد این متغییر رو در متد OnRecivie ،با همون آرگومان context مقدار دهی کنید

کد پی‌اچ‌پی:
public void onReceive(Context contextIntent intent){
Base_context=context;//مقدار دهی کردن شی کانتکس
.....//سایر دستورات



حالا میتونید به متدهایی که فقط داخل فضای Context قابل استفاده هستند دسترسی داشته باشید..مثلا

کد پی‌اچ‌پی:
Base_context.openOrCreateDatabase(DATABASE_NAMEContext.MODE_PRIVATE,null); 

یا برای استفاده از متد getApplaction() که در متد Toast استفاده کردید.از دستور

کد پی‌اچ‌پی:
Toast.makeText(Base_context.getApplicationContext(),.... 

استفاده کنید..من  کد شما رو نگاه کردم،شما از این دومتد به صورت غیر مجاز داخل BroadCast استفاده کردید.که باجایگزین کردن دستورات بالا مشکل شما حل میشود.
من سعی کردم یه دیدی از Context به شما بدم..چون درک و شناخت کامل شی Context یکی از مهمترین بخشهای برنامه نویسی اندروید است.
پاسخ
 سپاس شده توسط admin

مشکل در ذخیره سازی پیامک با استفاده از Broadcast Reciever (در برنامه نویسی اندروید)

#7
آقا خیلی ممنون از راهنماییت
مشکل حل شد........

 
پاسخ


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان

آخرین کلیدهای غیررایگان

شما هم می توانید کلیدهای غیررایگان منتشر کنید (بیشتر بدانید)