Autore Topic: Impostare 2 alarm manager  (Letto 554 volte)

Offline Paolo Favaretto

  • Nuovo arrivato
  • *
  • Post: 25
    • Mostra profilo
  • Dispositivo Android:
    Samsung S8+
  • Play Store ID:
    Paolo Favaretto
Impostare 2 alarm manager
« il: 18 Febbraio 2018, 15:25:48 CET »
Ciao a tutti, sto diventando matto per la creazione di 2 "sveglie", con una non ci sono problemi, imposto l'ora con il timepicker e lancio una noticica che mi ricorda qualcosa ma 2 non riesco proprio, ho provato con 2 "channels" ma non so come collegarlo al timepicker, avete qualche dritta su come fare ? grazie in anticipo a chi mi aiuta o mi suggerisce un tutorial. :-)
Paolo Favaretto

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 836
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 10 x64
Re:Impostare 2 alarm manager
« Risposta #1 il: 19 Febbraio 2018, 09:53:59 CET »
Cercando in rete come primo risultato di "android set multiple alarms" si trova questo: https://stackoverflow.com/a/12791212/466938

In pratica è necessario impostare esplicitamente differenti "requestCode" per i vari alarm:

Codice (Java): [Seleziona]
AlarmManager mgrAlarm = (AlarmManager) context.getSystemService(ALARM_SERVICE);
ArrayList<PendingIntent> intentArray = new ArrayList<PendingIntent>();

//Primo alarm
Intent intent = new Intent(context, OnAlarmReceiver.class);
int requestCode = 1; //Un valore qualsiasi
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, requestCode, intent, 0);
mgrAlarm.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
   SystemClock.elapsedRealtime() + 60000 * 10, //Fra 10 minuti
   pendingIntent);

intentArray.add(pendingIntent);

//Secondo alarm
intent = new Intent(context, OnAlarmReceiver.class);
requestCode = 2; //Un valore qualsiasi diverso dal precedente
pendingIntent = PendingIntent.getBroadcast(context, requestCode, intent, 0);
mgrAlarm.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
   SystemClock.elapsedRealtime() + 60000 * 15, //Fra 15 minuti
   pendingIntent);

intentArray.add(pendingIntent);

(codice non testato)
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline Paolo Favaretto

  • Nuovo arrivato
  • *
  • Post: 25
    • Mostra profilo
  • Dispositivo Android:
    Samsung S8+
  • Play Store ID:
    Paolo Favaretto
Re:Impostare 2 alarm manager
« Risposta #2 il: 19 Febbraio 2018, 10:03:37 CET »
Avevo visto anch'io questo link solo che non so come applicarlo ad un orario ricavato o impostato sul timepicker, nel senso che l'utilizzatore dell'app (è un app nostra aziendale per timbrare) deve poter impostare l'ora del promemoria della mattina e di fine giornata che l'app gli ricorda di timbrare, io sono principiante da una anno che "prova" a fare app, ho pubblicato una sola app a differenza di te che vedo sei molto bravo.
Ti ringrazio ancora per la tua pazienza, ciao Paolo
Paolo Favaretto

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 836
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 10 x64
Re:Impostare 2 alarm manager
« Risposta #3 il: 19 Febbraio 2018, 10:10:40 CET »
Posta il codice e vediamo di trovare una soluzione
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline Paolo Favaretto

  • Nuovo arrivato
  • *
  • Post: 25
    • Mostra profilo
  • Dispositivo Android:
    Samsung S8+
  • Play Store ID:
    Paolo Favaretto
Re:Impostare 2 alarm manager
« Risposta #4 il: 19 Febbraio 2018, 12:54:46 CET »
Allora, Activity_main dove risiede il Timepicker per settare l' ora di "Entrata" e l' ora di "Uscita" :
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:layout_editor_absoluteY="81dp"
    tools:layout_editor_absoluteX="0dp">

    <TimePicker
        android:id="@+id/alarmTimePicker"
        android:layout_width="350dp"
        android:layout_height="372dp"
        app:layout_constraintTop_toTopOf="parent"
        android:layout_marginTop="8dp"
        android:layout_marginLeft="8dp"
        app:layout_constraintLeft_toLeftOf="parent"
        android:layout_marginRight="8dp"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintHorizontal_bias="0.518" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Entrata"
        android:id="@+id/start_alarm"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="8dp"
        app:layout_constraintTop_toBottomOf="@+id/alarmText"
        android:layout_marginLeft="63dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        android:layout_marginBottom="8dp" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Uscita"
        android:id="@+id/stop_alarm"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_marginTop="8dp"
        app:layout_constraintTop_toBottomOf="@+id/alarmText"
        android:layout_marginRight="8dp"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintLeft_toRightOf="@+id/start_alarm"
        android:layout_marginLeft="8dp"
        app:layout_constraintHorizontal_bias="0.705"
        app:layout_constraintBottom_toBottomOf="parent"
        android:layout_marginBottom="8dp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Set the alarm clock!"
        android:id="@+id/alarmText"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_below="@+id/start_alarm"
        android:layout_marginTop="8dp"
        app:layout_constraintTop_toBottomOf="@+id/alarmTimePicker"
        android:layout_marginRight="8dp"
        app:layout_constraintRight_toRightOf="parent"
        android:layout_marginLeft="8dp"
        app:layout_constraintLeft_toLeftOf="parent" />


</android.support.constraint.ConstraintLayout>

Activity Timbra e' il Layout e l'activity principale che si utilizza per Timbrare :
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:background="@color/colorBluTenue"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"          >
 <WebView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/webview"
        android:layout_width="match_parent"
        android:layout_height="350dp"        />
 <Button
        android:id="@+id/setta"
        android:background="@drawable/btn_white"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/webview"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="45dp"
        android:text="Setta Promemoria"      />

 <TextView
     android:id = "@+id/data"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:textColor="#ffffff"
     android:textSize ="20sp"
     android:text = "data"
     android:layout_centerHorizontal="true"
     android:layout_below="@+id/setta"
     android:layout_marginTop="20dp"         />
</RelativeLayout>

Codice per la MainActivity :
public class MainActivity extends AppCompatActivity {

    AlarmManager alarmManager;
    private PendingIntent pending_intent;

    private TimePicker alarmTimePicker;
    private TextView alarmTextView;

    private AlarmReceiver alarm;

    MainActivity inst;
    Context context;

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

        this.context = this;

        //alarm = new AlarmReceiver();
        alarmTextView = (TextView) findViewById(R.id.alarmText);

        final Intent myIntent = new Intent(this.context, AlarmReceiver.class);

        // Get the alarm manager service
        alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

        // set the alarm to the time that you picked
        final Calendar calendar = Calendar.getInstance();

        alarmTimePicker = (TimePicker) findViewById(R.id.alarmTimePicker);

        Button start_alarm= (Button) findViewById(R.id.start_alarm);
        start_alarm.setOnClickListener(new View.OnClickListener() {
            @TargetApi(Build.VERSION_CODES.M)

            @Override
            public void onClick(View v) {

                calendar.add(Calendar.SECOND, 3);
                //setAlarmText("You clicked a button");

                final int hour = alarmTimePicker.getHour();
                final int minute = alarmTimePicker.getMinute();;

                setAlarmText("You clicked a " + hour + " and " + minute);

                calendar.set(Calendar.HOUR_OF_DAY, alarmTimePicker.getHour());
                calendar.set(Calendar.MINUTE, alarmTimePicker.getMinute());

                myIntent.putExtra("extra", "yes");
                pending_intent = PendingIntent.getBroadcast(MainActivity.this, 0,
                        myIntent, PendingIntent.FLAG_UPDATE_CURRENT);

                alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pending_intent);

                // now you should change the set Alarm text so it says something nice
                setAlarmText("Alarm settato a : " + hour + ":" + minute);
                //Toast.makeText(getApplicationContext(), "You set the alarm", Toast.LENGTH_SHORT).show();
            }

        });

        Button uscita= (Button) findViewById(R.id.stop_alarm);
        uscita.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

        //      Codice per tasto Uscita
                setAlarmText("Alarm Uscita");
                //setAlarmText("You clicked a " + " canceled");
            }
        });

    }

    public void setAlarmText(String alarmText) {

        alarmTextView.setText(alarmText);
    }}

L' Activity Timbra che è l' activity usata per Timbrare :
public class TimbraActivity extends AppCompatActivity {

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

        Button setta = (Button)findViewById(R.id.setta);
        WebView myWebView = (WebView) findViewById(R.id.webview);
        TextView data  = (TextView) findViewById(R.id.data);


        WebSettings webSettings = myWebView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        myWebView.getSettings().setLoadsImagesAutomatically(true);

        myWebView.loadUrl("www.miosito.com");

        GregorianCalendar gc = new GregorianCalendar();
        final int Giorno = (gc.get(Calendar.DAY_OF_WEEK));

        if (Giorno == 2) {
            data.setText("Oggi è : Lunedì ");
        }
        if (Giorno == 3) {
            data.setText("Oggi è : Martedì ");
        }
        if (Giorno == 4) {
            data.setText("Oggi è : Mercoledì ");
        }
        if (Giorno == 5) {
            data.setText("Oggi è : Giovedì ");
        }
        if (Giorno == 6) {
            data.setText("Oggi è : Venerdì ");
        }
setta.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent( getApplicationContext(), MainActivity.class );
        startActivity(intent);

    }
});

La classe RingtonePlayngService gestisce la notifica che cliccandoci sopra mi porta all' activity Timbta per Timbrare :
public class RingtonePlayingService extends Service {

    MediaPlayer mMediaPlayer;

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
    @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
    @Override
    public int onStartCommand(Intent intent, int flags, int startId)
    {

        final NotificationManager mNM = (NotificationManager)
                getSystemService(NOTIFICATION_SERVICE);

        Intent intent1 = new Intent(this.getApplicationContext(), TimbraActivity.class);
        PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent1, 0);

        Notification mNotify  = new Notification.Builder(this)
                .setContentTitle("Promemoria Timbratura")
                .setContentText("Fai click per timbrare !")
                .setSmallIcon(R.drawable.images)
                .setContentIntent(pIntent)
                .setAutoCancel(true)
                .build();
        mMediaPlayer = MediaPlayer.create(this, R.raw.yahoo);
        mMediaPlayer.start();
        mNM.notify(0, mNotify);

        return START_NOT_STICKY;
    }

e questo e' tutto, Una activity che ospita una WebView dove si timbra con 1 pulsante per aprire l'activity che ospita il Timepicker con 2 pulsanti per settare l' ora di "Entrata" e "Uscita", io ci sto diventando matto, per te magari è una cretinata...se ci riesci ti ringrazio immensamente  ;-) ciao
Paolo Favaretto

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 836
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 10 x64
Re:Impostare 2 alarm manager
« Risposta #5 il: 19 Febbraio 2018, 13:43:39 CET »
Modifica

Codice (Java): [Seleziona]
pending_intent = PendingIntent.getBroadcast(MainActivity.this, 0,
                        myIntent, PendingIntent.FLAG_UPDATE_CURRENT);

in

Codice (Java): [Seleziona]
pending_intent = PendingIntent.getBroadcast(MainActivity.this, hour * 100 + minute,
                        myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline Paolo Favaretto

  • Nuovo arrivato
  • *
  • Post: 25
    • Mostra profilo
  • Dispositivo Android:
    Samsung S8+
  • Play Store ID:
    Paolo Favaretto
Re:Impostare 2 alarm manager
« Risposta #6 il: 19 Febbraio 2018, 13:57:08 CET »
Grazie proverò, anche se non capisco basta che funzioni  :D
Paolo Favaretto

Offline Paolo Favaretto

  • Nuovo arrivato
  • *
  • Post: 25
    • Mostra profilo
  • Dispositivo Android:
    Samsung S8+
  • Play Store ID:
    Paolo Favaretto
Re:Impostare 2 alarm manager
« Risposta #7 il: 23 Febbraio 2018, 21:27:32 CET »
niente da fare non funziona, appena setto il secondo allarme sostituisce il primo  :-\

Post unito: 24 Febbraio 2018, 11:05:40 CET
Ciao Ohmnibus, sono riuscito a far funzionare 2 allarmi impostandoli uno alla volta, uscendo per poi rientrare nell'Activity per impostare il secondo, ho inserito la modifica che mi hai suggerito tu e, funziona ma mi sbaglia di 5 minuti, hai qualche suggerimento per caso ?  :-)
« Ultima modifica: 24 Febbraio 2018, 11:05:40 CET da Paolo Favaretto, Reason: Merged DoublePost »
Paolo Favaretto