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

اجرای برنامه ی اندروید در پس زمینه (جاوا، اندروید استودیو)


MH MH

سوال

سلام وقتتون بخیر؛

من یک برنامه به زبان جاوا برای اندروید در اندروید استودیو نوشتم، برنامه به این صورت هستش که کاربر یک سری ساعات رو انتخاب میکنه

و وقتی ساعت دستگاه به ساعت مد نظر برنامه رسید، یک آهنگ پخش میشه. من میخوام موقعی که کاربر به طور کامل برنامه رو بست، باز هم

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

 

منیفست:

<service android:name=".AlarmService" android:enabled="true" android:exported="false"/>

 

کدهای اکتیویتی proActivity:

private void checkWorkStatus() {
        // گرفتن تاریخ و ساعت فعلی
        Calendar calendar = Calendar.getInstance();
        String currentDay = new SimpleDateFormat("EEEE", new Locale("fa")).format(calendar.getTime());
        String currentHour = String.format("%02d:00 - %02d:00",
                calendar.get(Calendar.HOUR_OF_DAY),
                (calendar.get(Calendar.HOUR_OF_DAY) + 1) % 24);

        int currentMinute = calendar.get(Calendar.MINUTE);

        // گرفتن ساعات کاری ذخیره‌شده برای روز جاری
        Set<String> workHours = sharedPreferences.getStringSet(currentDay, null);

        if (workHours == null || workHours.isEmpty()) {
            tvStatus.setText("تعطیل");
        } else if (!workHours.contains(currentHour)) {
            tvStatus.setText("کار شروع نشده");
        } else {
            // بررسی دقیقه‌های مختلف و تغییر متن لیبل
            if (currentMinute == 25 || currentMinute == 29 || currentMinute == 55 || currentMinute == 59) {
                tvStatus.setText("استراحت :)");
                // فقط یکبار در دقیقه‌های مشخص شده آهنگ استراحت پخش می‌شود
                playRestSoundOnce(currentMinute);
            } else if (currentMinute == 0 || currentMinute == 24 || currentMinute == 30 || currentMinute == 54) {
                tvStatus.setText("کار :(");
                // فقط یکبار در دقیقه‌های مشخص شده آهنگ کار پخش می‌شود
                playWorkSoundOnce(currentMinute);
            } else {
                tvStatus.setText("کار");
            }
        }
    }

    private void playRestSoundOnce(int minute) {
        if (minute == 25 && restPlayer != null && !restPlayer.isPlaying()) {
            restPlayer.start(); // پخش آهنگ استراحت
        } else if (minute == 55 && restPlayer != null && !restPlayer.isPlaying()) {
            restPlayer.start(); // پخش آهنگ استراحت
        }
    }

    private void playWorkSoundOnce(int minute) {
        if (minute == 0 && workPlayer != null && !workPlayer.isPlaying()) {
            workPlayer.start(); // پخش آهنگ کار
        } else if (minute == 30 && workPlayer != null && !workPlayer.isPlaying()) {
            workPlayer.start(); // پخش آهنگ کار
        }
    }

 

کدهای AlarmServices:

package com.example.bbbb;

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Handler;
import android.os.IBinder;
import java.util.Calendar;

public class AlarmService extends Service {

    private MediaPlayer restPlayer, workPlayer;
    private Handler handler = new Handler();

    @Override
    public void onCreate() {
        super.onCreate();
        // ایجاد دو MediaPlayer برای فایل‌های صوتی مختلف
        restPlayer = MediaPlayer.create(this, R.raw.rest); // صدای استراحت
        workPlayer = MediaPlayer.create(this, R.raw.work); // صدای کار
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // شروع چک وضعیت هر 1 ثانیه
        startAlarmCheck();
        return START_STICKY;
    }

    private void startAlarmCheck() {
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                checkAlarmCondition(); // بررسی وضعیت و پخش هشدار
                handler.postDelayed(this, 1000); // اجرای مجدد پس از یک ثانیه
            }
        }, 1000);
    }

    private void checkAlarmCondition() {
        // بررسی وضعیت و دقیقه برای پخش هشدار
        int currentMinute = Calendar.getInstance().get(Calendar.MINUTE);

        // دقیقه‌های خاص برای استراحت و کار
        if (currentMinute == 0 || currentMinute == 30) {
            playWorkSound();  // پخش صدای کار
        } else if (currentMinute == 25 || currentMinute == 55) {
            playRestSound();  // پخش صدای استراحت
        }
    }

    private void playRestSound() {
        if (restPlayer != null && !restPlayer.isPlaying()) {
            restPlayer.start();  // پخش صدای استراحت
        }
    }

    private void playWorkSound() {
        if (workPlayer != null && !workPlayer.isPlaying()) {
            workPlayer.start();  // پخش صدای کار
        }
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        if (restPlayer != null) {
            restPlayer.release();
        }
        if (workPlayer != null) {
            workPlayer.release();
        }
    }

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

 

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

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

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

هنوز برای این سوال پاسخی ارسال نشده است

بایگانی شده

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

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

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