رفتن به مطلب
  • 0

فهمیدن وضعیت ران بودن یک سرویس


mr.ehsan8001

سوال

سلام دوستان من در MainActivity یک ایمیج ویو و تکست ویو معرفی کردم و یک باتن دارم که سرویسی رو اجرا میکنه.

میخوام بدونم چطور در MainActivity چک کنم که سرویس در حال اجرا هست یا خیر و اگه اجرا بود یا نبود تکس ویو و ایمیج ویو تغییر کنه و با زدن دوباره باتن سرویس خاموش بشه؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر

9 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

:malih::pardon:  this way

public boolean isServiceRunning(Class<?> serviceClass) {
    ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
    for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
        if (serviceClass.getName().equals(service.service.getClassName())) {
            return true;
        }
    }
    return false;
}

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در در 1395/09/21, 15:12:06، محمدرضا شاهپیری گفته است :

خیلی عجیبه شاید یه جایی اشتباهی چیزی کردین

شما بیاین به این روش هم عمل کنید شاید نتیجه گرفتین که البته دیگه قطعا نباید مشکلی هم باشه

توی سرویس یه متغیر استاتیک به صورت زیر تعریف کنید


public static Boolean serviceRunning = false;

حالا توی سرویس این کارا رو انجام بدین


public int onStartCommand(Intent intent, int flags, int startId) {

    serviceRunning = true;
    ...
}

 @Override
public void onDestroy()
{
    serviceRunning = false;

} 

حالا به این صورت چک کنید سرویس اگه باز بود ببندید با همون دستور stopservice


if(NightShift.serviceRunning){
stopservice......
}else{
startservice
}

 

بازم نشد ،مثل دفعه قبل شد

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

اینم کد سرویس و اکتیویتی:

 

MainActivity.java

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
      
....
      final View li = findViewById(R.id.night_la);

        li.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (NightShift.serviceRunning) {
                    stopService(new Intent(MainActivity.this, NightShift.class));
                } else {
                    startService(new Intent(MainActivity.this, NightShift.class));
                }
            }
        });
}

 

NightShift.java (Service)

    public static Boolean serviceRunning = false;

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

    @Override
    public void onCreate() {
        super.onCreate();

        ...

        serviceRunning = true;

    }

    @Override
    public void onDestroy() {
        serviceRunning = false;
    }

}

البته فکر نمیکنم onCreate سرویس مشکلی ایجاد کنه، باید onStartCommand باشه؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 12 دقیقه قبل، محمدرضا شاهپیری گفته است :

:malih::pardon:  this way


public boolean isServiceRunning(Class<?> serviceClass) {
    ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
    for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
        if (serviceClass.getName().equals(service.service.getClassName())) {
            return true;
        }
    }
    return false;
}

 

ممنون، کدی هم که خودم پیدا کردم اینه و داخل onCreate قرار میگیره:

ActivityManager manager = (ActivityManager)context.   getSystemService(Context.ACTIVITY_SERVICE);//use context received in broadcastreceiver

for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE))
 {

     if (MyService.class.getName().equals(service.service.getClassName())) {
                         //running 
        }
    else{
          //not running 
        }

 }
لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 26 دقیقه قبل، محمدرضا شاهپیری گفته است :

:malih::pardon:  this way


public boolean isServiceRunning(Class<?> serviceClass) {
    ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
    for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
        if (serviceClass.getName().equals(service.service.getClassName())) {
            return true;
        }
    }
    return false;
}

 

یه مشکلی هست:

        final TextView night = (TextView) findViewById(R.id.night_state);
        final ImageView nightImage = (ImageView) findViewById(R.id.night_icon);
        final ActivityManager manager = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);

        nightImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {

                    if (NightShift.class.getName().equals(service.service.getClassName())) {
                        night.setText("Off");
                        nightImage.setImageResource(R.drawable.night_off);
                        stopService(new Intent(MainActivity.this, NightShift.class));
                    } else {
                        night.setText("On");
                        nightImage.setImageResource(R.drawable.night_on);
                        startService(new Intent(MainActivity.this, NightShift.class));
                    }

                }
            }
        });

اینجا من وقتی سرویس رو میخوام خاموش کنم فقط ایمیج ویو و تکست ویو تغییر میکنن ولی سرویس دوباره فعال میشه(روی سرویس قبلی اجرا میشه)

لینک ارسال
به اشتراک گذاری در سایت های دیگر

این چه طرز کدنوشتنه آخه:unknown:

دوست عزیز بنده یه متد دادم خدمتتون شما هنوز نحوه استفاده از یه متد رو نمیدونین بعد چجوری میخواین این مفاهیم سطح بالا رو کار کنید؟؟؟ 

اول مفاهیم مقدماتی رو یاد بگیرین پله پله برنامه نویسی چیزی نیست گه یه شبه با چهار تا قطعه کد آدم یاد بگیره اینجوری مطمءن باشید در آینده سخت میشه کارتون

(کلا اینا چیزی بود که بنده حقیر به نظرم رسید گفتم شاید به دردتون بخوره):53:

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

if (isServiceRunning(NightShift.class)){
            //servis dar hale ejras
        }else {
   // service baste ast
}

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در در 1395/09/19, 22:42:45، محمدرضا شاهپیری گفته است :

این چه طرز کدنوشتنه آخه:unknown:

دوست عزیز بنده یه متد دادم خدمتتون شما هنوز نحوه استفاده از یه متد رو نمیدونین بعد چجوری میخواین این مفاهیم سطح بالا رو کار کنید؟؟؟ 

اول مفاهیم مقدماتی رو یاد بگیرین پله پله برنامه نویسی چیزی نیست گه یه شبه با چهار تا قطعه کد آدم یاد بگیره اینجوری مطمءن باشید در آینده سخت میشه کارتون

(کلا اینا چیزی بود که بنده حقیر به نظرم رسید گفتم شاید به دردتون بخوره):53:

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


if (isServiceRunning(NightShift.class)){
            //servis dar hale ejras
        }else {
   // service baste ast
}

 

ممنون از راهنمایی تون :give_heart:

مشکل من توی بستن سرویس هستش که بسته نمیشه کدی که دادین درحال اجرا بودن یا نبودن رو برسی میکنه(البته اول دنبال کدی که دادین بودم)

لینک ارسال
به اشتراک گذاری در سایت های دیگر

هموطن شما باید به این صورت استفاده کنید تو کلیک باید چک کنید سرویس بسته هست یا نه

nightImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                    if (isServiceRunning(NightShift.class)) {
                        night.setText("On");
                        nightImage.setImageResource(R.drawable.night_on);
                        stopService(new Intent(MainActivity.this, NightShift.class));
                    } else {
                        night.setText("Of");
                        nightImage.setImageResource(R.drawable.night_off);
                        startService(new Intent(MainActivity.this, NightShift.class));
                    }

                }
        });

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 13 ساعت قبل، محمدرضا شاهپیری گفته است :

هموطن شما باید به این صورت استفاده کنید تو کلیک باید چک کنید سرویس بسته هست یا نه


nightImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                    if (isServiceRunning(NightShift.class)) {
                        night.setText("On");
                        nightImage.setImageResource(R.drawable.night_on);
                        stopService(new Intent(MainActivity.this, NightShift.class));
                    } else {
                        night.setText("Of");
                        nightImage.setImageResource(R.drawable.night_off);
                        startService(new Intent(MainActivity.this, NightShift.class));
                    }

                }
        });

 

داداش درست میگی ولی این متد

 stopService(new Intent(MainActivity.this, NightShift.class));

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

لینک ارسال
به اشتراک گذاری در سایت های دیگر

خیلی عجیبه شاید یه جایی اشتباهی چیزی کردین

شما بیاین به این روش هم عمل کنید شاید نتیجه گرفتین که البته دیگه قطعا نباید مشکلی هم باشه

توی سرویس یه متغیر استاتیک به صورت زیر تعریف کنید

public static Boolean serviceRunning = false;

حالا توی سرویس این کارا رو انجام بدین

public int onStartCommand(Intent intent, int flags, int startId) {

    serviceRunning = true;
    ...
}

 @Override
public void onDestroy()
{
    serviceRunning = false;

} 

حالا به این صورت چک کنید سرویس اگه باز بود ببندید با همون دستور stopservice

if(NightShift.serviceRunning){
stopservice......
}else{
startservice
}

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...