رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
اجرا نشدن آلارم منیجر در فاصله زمانی تعریف شده
#1
Question 
سلام
من یه آلارم منیجر نوشتم که در فاصله های زمانی تعریف شده براش یه broadcastReciver ایی رو اجرا کنه و مثلا یه نوتیفیکیشن تست بفرسته اما فقط برای اولین بار که اجراش میکنم کار میکنه بعدش توو اون فاصله های زمانی که گفتم بهش اجرا نمیکنه broadcast و البته این مشکل و توو اندروید 6 بهش برخورد کردم و از اندروید 4 به قبل درست کار میکنه و روو اندروید 5 هم تست نگرفتم ببینم همچین مشکلی اونجا هم هست یا
من کد هامو در ادامه میزارم خود پروژه رو هم در انتها میزارم
ممنون میشم اگه راهنماییم کنید که مشکل از کجاست

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void startAlarm_onClick(View view)
    {
        Intent alarmIntent = new Intent(this, AlarmReciver.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, 0);
        AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        if(Build.VERSION.SDK_INT < 23){
            manager.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 900000, pendingIntent);
        }
        else{
            manager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, 900000, pendingIntent);
        }
    }
}

public class AlarmReciver extends BroadcastReceiver {
    public AlarmReciver() {

    }

    @Override
    public void onReceive(Context context, Intent intent) {
        setNotification(context, "test", 1);
    }

    private void setNotification(Context context, String message, int id) {
        NotificationCompat.Builder builder =
                new NotificationCompat.Builder(context)
                        .setSmallIcon(R.mipmap.ic_launcher)
                        .setContentTitle("test")
                        .setContentText(message)
                        .setSound(Uri.parse("android.resource://"
                                + context.getPackageName() + "/" + R.raw.noti_sound))
                        .setLights(Color.BLUE, 1000, 300)
                        .setAutoCancel(true);

        Intent notificationIntent = new Intent(context, MainActivity.class);
        PendingIntent contentIntent = PendingIntent.getActivity(context, id, notificationIntent,
                PendingIntent.FLAG_UPDATE_CURRENT);
        builder.setContentIntent(contentIntent);

        NotificationManager manager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);
        manager.notify(0, builder.build());
    }
}

دانلود سورس
پاسخ
تشکر شده توسط:
#2
بهتره با کلاس Timer کار کنین و سرویس رو در وضعیت راه‌اندازی خودکار با ریستارت‌شدن دستگاه قرار بدین.
پاسخ
تشکر شده توسط:
#3
کلاس تایمر منابع زیادی نمیبره ؟؟
پاسخ
تشکر شده توسط:
#4
نه به اون صورت. بستگی داره به اینکه توی کد Runnable خودتون چه کارهایی انجام داده باشین.
پاسخ
تشکر شده توسط: saman-arsenal
#5
تشکر Heart
من این کد و توو سرویسم نوشتم اما اصلا درست کار نمیکنه اصلا منظم نیست حتی بعد دو سه بار نا منظم کار کردن دیگه انگار انجام نمی شد؟؟ Undecided

public class MyService extends Service {

    private final static int INTERVAL = 1000 * 60 * 2; //2 minutes
    Handler mHandler = new Handler();

    public MyService() {

    }

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

    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        startRepeatingTask();
        return Service.START_STICKY;
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
        throw new UnsupportedOperationException("Not yet implemented");
    }

    void startRepeatingTask()
    {

        mHandlerTask.run();
    }

    void stopRepeatingTask()
    {
        mHandler.removeCallbacks(mHandlerTask);
    }

    Runnable mHandlerTask = new Runnable()
    {
        @Override
        public void run() {
            setNotification(getApplicationContext(), "test", 1);
            mHandler.postDelayed(mHandlerTask, INTERVAL);
        }
    };

    private void setNotification(Context context, String message, int id) {
        NotificationCompat.Builder builder =
                new NotificationCompat.Builder(context)
                        .setSmallIcon(R.mipmap.ic_launcher)
                        .setContentTitle("test")
                        .setContentText(message)
                        .setSound(Uri.parse("android.resource://"
                                + context.getPackageName() + "/" + R.raw.noti_sound))
                        .setLights(Color.BLUE, 1000, 300)
                        .setAutoCancel(true);

        Intent notificationIntent = new Intent(context, MainActivity.class);
        PendingIntent contentIntent = PendingIntent.getActivity(context, id, notificationIntent,
                PendingIntent.FLAG_UPDATE_CURRENT);
        builder.setContentIntent(contentIntent);

        NotificationManager manager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);
        manager.notify(0, builder.build());
    }
}
پاسخ
تشکر شده توسط:




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