کلیدستان

نسخه‌ی کامل: به کار بردن BroadcastReceiver برای دریافت میزان پیشرفت عملیات از Service (اندروید)
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
دوستان
من دوتا اکتیویتی دارم ک در اکتیویتی اول مقداری رو برای اکتیویتی دوم میفرستم و در اکتیویتی دوم progress bar دارم که از صفر تا 100 رو پیمایش میکنه!
و وقتی از اکتیویتی دوم خارج میشم(مثلا با بک زدن) و مجدد وارد اکتیویتی دوم میشم progress bar مقدار 0 رو نشون میده و ادامه پروسس قبلی رو طی نمیکنه!
چکار باید کنم؟
+ از سرویس هم استفاده کردم ولی نشد عناصرم رو تعریف کنم(شاید هم من بلد نبودم).راهش چیه ؟؟
کمک فوری لطفا
مرسی
سلام.
به هر حال چون از Activity خارج می شوید، باید از Service استفاده شود (تا عملیات متوقف نشود).
همچنین ما باید درصد پیشرفت عملیاتی که در سرویس (Service) اجرا می شود را بدانیم، بنابراین در Activity مورد نظر می توانیم از BroadcastReceiver استفاده کنیم که عدد مربوط به درصد پیشرفت را از Service دریافت کند و بر اساس آن، درصد مربوط به ProgressBar یا ProgressDialog را تغییر بدهد (به روزرسانی کند).

بنده یک کد را در ادامه ذکر می کنم، اما کد ناقص است و تنها برای این می باشد که کلیت موضوع را متوجه شوید و به دنبال مثال های مشابه آن (و کامل) در اینترنت جستجو کنید.
بخشی از کد Activity (ناقص است و تنها کلیات آن ذکر شده) :

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


 
   @Override
    protected void onCreate
(Bundle savedInstanceState) {
 
       super.onCreate(savedInstanceState);
 
       setContentView(R.layout.myactivity);
 
       
        intent 
= new Intent(thisMyService.class);
 
       startService(intent);

 
       // BroadcastReceiver to show download progress in ProgressDialog (get progress from service)
 
       registerReceiver(broadcastReceiver, new IntentFilter(MyService.BROADCAST_ACTION));
 
       
        
// code for show ProgressDialog

 
   }







 
   // BroadcastReceiver to show download progress in ProgressDialog 
 
   private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
 
       @Override
        public void onReceive
(Context contextIntent intent) {
 
           updateUI(intent);
 
       }
 
   };

 
   @Override
    public void onResume
() {
 
       super.onResume();
 
       //
 
   }

 
   @Override
    public void onPause
() {
 
       super.onPause();
 
       // unregisterReceiver(broadcastReceiver);
 
       // stopService(intent);
 
   }

 
   private void updateUI(Intent intent) {
 
       // get value from service
 
       String ProgressPercentage intent.getStringExtra("ProgressPercentage");
 
       // code for change Progress Percentage in ProgressDialog
 
   }





بخشی از کد Service (ناقص است و تنها کلیات آن ذکر شده) :

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


 
   public static final String BROADCAST_ACTION "com.kelidestan.example.displayevent";
 
   private final Handler handler = new Handler();
 
   public Intent intent;

 
   @Override
    public void onCreate
() {
 
       super.onCreate();
 
       
        intent 
= new Intent(BROADCAST_ACTION);
 
   }

 
   @Override
    public void onStart
(Intent intentint startId) {
 
       handler.removeCallbacks(sendUpdatesToUI);
 
       handler.post(sendUpdatesToUI);
 
   }

 
   private Runnable sendUpdatesToUI = new Runnable() {
 
       public void run() {
 
           intent.putExtra("ProgressPercentage"String.valueOf(dl_progress));
 
           sendBroadcast(intent);
 
           handler.post(this);
 
       }
 
   };


 
   @Override
    public int onStartCommand
(Intent intentint flagsint startId) {
 
       //
 
   }


 
   @Override
    public IBinder onBind
(Intent intent) {
 
       return null;
 
   }




بخشی از کدها و مواردی مثل ذکر Service در فایل AndroidManifest.xml و ... ذکر نشدند (بنابراین در اینترنت به دنبال مثال های کامل در این زمینه باشید که توضیحات کامل نیز داشته باشند).

Flower
مرسي از كمكتون