ورود

View Full Version : مشکل با alarm manager



samiasoft
شنبه 03 شهریور 1397, 20:42 عصر
سلام دوستان

من میخواستم در زمان مشخص یک کاری رو انجام بدم برای مثال یک toast رو اجرا کنم برای همین دستور زیر رو نوشتم :
public class MainActivity extends AppCompatActivity {

private AlarmManager alarmMgr;
private PendingIntent alarmIntent;


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




set_alarm();
}



public void set_alarm(){


alarmMgr = (AlarmManager) MainActivity.this.getSystemService(Context.ALARM_S ERVICE);
Intent intent = new Intent(MainActivity.this, MyReceiver.class);
alarmIntent = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);




Calendar calendar = Calendar.getInstance();
calendar .add(Calendar.HOUR_OF_DAY, 21);
calendar .add(Calendar.MINUTE, 10);
calendar .add(Calendar.SECOND, 30);

alarmMgr.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmIntent);


}

و کلاس MyReceiver

public class MyReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent arg1) {


Toast.makeText(context,"active the alarm", Toast.LENGTH_LONG).show();
}


}

و در فایل مانفیست مجوز :
<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

و
<receiver android:name=".MyReceiver"/>

متاسفانه مشکلی که هست اینه اصلا این اجرا نمیشه!!! به فرض الان ساعت 21:09 هست و من آلارم را برای 21:10 تنظیم کردم ولی هیچ دستوری اجرا نشد !

به نظرتون مشکل از کجاست؟!

farhad_shiri_ex
یک شنبه 04 شهریور 1397, 08:43 صبح
باسلام




<receiver android:name=".MyReceiver"/>



این را در مانیفست جایگزین کن!

<receiver android:name=".MyReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>

samiasoft
یک شنبه 04 شهریور 1397, 16:53 عصر
باسلام



این را در مانیفست جایگزین کن!

<receiver android:name=".MyReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>

ممنونم دوست عزیز از توجهتون...متاسفانه باز هم دستوری اجرا نشد:ناراحت:چندبار دستورات رو مجداا چک کردم نمیدونم کجارو اشتباه میکنم

samiasoft
یک شنبه 04 شهریور 1397, 19:37 عصر
بالاخره تونستم حل کنم...مشکل در متد add بود که بایستی از متد set استفاده میکردم.

calendar .set(Calendar.HOUR_OF_DAY, 20);
calendar .set(Calendar.MINUTE, 3);
calendar .set(Calendar.SECOND, 59);


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

if (Build.VERSION.SDK_INT >= 21) {

alarmMgr.setAlarmClock(new AlarmManager.AlarmClockInfo(calendar.getTimeInMill is(), alarmIntent), alarmIntent);


}else if (Build.VERSION.SDK_INT >= 19) {


alarmMgr.setExact(AlarmManager.RTC_WAKEUP,calendar .getTimeInMillis(), alarmIntent);


}else {


alarmMgr.set(AlarmManager.RTC_WAKEUP,calendar.getT imeInMillis(), alarmIntent);
}

همچنین در امولایتر هم دقت کنید تاریخ دستگاه به وقت محلی ایران باشد!