mahdi piri
5 سال پیش توسط mahdi piri مطرح شد
0 پاسخ

Alarm Manager

سلام دوستان من دارم دوره اندروید رو میگذرونم توی یه اپیکیشن که خودم درستش کردم یه مشکل دارم اونم اینکه من یه آلارم میخوام درست کنم که اگه گوشی خاموش روشن شد دوباره آلارم بده من این کار رو با BroadcastReceiver انجام میدم اما هیچ آلارمی نمیده

کد broadcastReceiver:
public class MyBroadcast_Receiver extends BroadcastReceiver {
MyDataBase myDataBase;
private List<NoteModel> noteModels;
private List<PendingIntent> pendingIntents;
AlarmManager alarmManager;
private int requestCode=1001;
private boolean isPM=false;

@Override

public void onReceive(Context context, Intent intent) {
    if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {

        myDataBase = new MyDataBase(context);
        noteModels = new ArrayList<>();
        pendingIntents = new ArrayList<>();
        Cursor cursor = myDataBase.getRememberInfo(1);

        alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
            NoteModel model = new NoteModel();
            model.setId(cursor.getInt(0));
            model.setTitle(cursor.getString(1));
            model.setDesc(cursor.getString(2));
            model.setRemember(cursor.getInt(3));
            model.setDate(cursor.getString(4));
            model.setTime(cursor.getString(5));
            noteModels.add(model);
            Intent i = new Intent();
            i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            PendingIntent pendingIntent = PendingIntent.getActivity(context, requestCode, i, PendingIntent.FLAG_UPDATE_CURRENT);
            Calendar calendar = Calendar.getInstance();
            String time = model.getTime();
            String[] times = time.split(":");
            String date = model.getDate();
            String[] dates = date.split("/");
            if (Integer.parseInt(times[0]) > 12) {
                isPM = true;
            }
            calendar.set(Calendar.YEAR, Integer.parseInt(dates[0]));
            calendar.set(Calendar.MONTH, Integer.parseInt(dates[1]));
            calendar.set(Calendar.DAY_OF_MONTH, Integer.parseInt(dates[2]));
            calendar.set(Calendar.HOUR, isPM ? Integer.parseInt(times[0]) - 12 : Integer.parseInt(times[0]));
            calendar.set(Calendar.MINUTE, Integer.parseInt(times[1]));
            calendar.set(Calendar.AM_PM, isPM ? 1 : 0);
            alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),1000,pendingIntent);
            pendingIntents.add(pendingIntent);
            requestCode++;
            isPM = false;

        }
    }
}

}

اینم از manifest:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<application

    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".AlarmActivity"></activity>
    <activity android:name=".SplashActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".Second_Activity" />
    <activity android:name=".MainActivity" />
    <receiver android:name=".MyBroadcast_Receiver"
        android:enabled="false"
        >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED"/>
            <action android:name="android.intent.action.QUICKBOOT_POWERON"/>
        </intent-filter>
    </receiver>
</application>

ممنون میشم کمکم کنید