Adaptation in notifications

Asked

Viewed 32 times

1

Based on some answers found on this site I adapted a code to arrive notifications in a certain time if someone can finalize this code and help me activate the notifications

Screen where I should call the notification:

public class EscolhaLuzCasa extends AppCompatActivity {
    private EditText rep1, rep2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_escolha_luz_casa);

        rep1 = (EditText) findViewById(R.id.horarep1);
        rep2 = (EditText) findViewById(R.id.rep2);
    }

    public void onClick(View view ) {
        Context context = null;

        StartUpBootReceiver.setAlarm(context , 21, 30);
        int valor = (Integer.parseInt(rep1.getText().toString()));

            if(valor >= 300) {
                Intent intent = new Intent(this, luzcasaalto.class);
                startActivity(intent);
            }else if (valor <= 200  &&  (valor  >= 100)){
                Intent intent = new Intent(this, luzcasamedio.class);
                startActivity(intent);
            }else if (valor < 100 ){
            Intent intent = new Intent(this, luzcasabaixo.class);
            startActivity(intent);

        }
    }
}

StartUpBootReceiver:

public class StartUpBootReceiver extends BroadcastReceiver {

    private static int REPEATING_ID = 1001;
    private static int ON_TIME_ID = 1002;
    private static String HOUR = "hour";
    private static String MINUTE = "minute";


    public static void setAlarm(Context context, int hour, int minute){
        SharedPreferences preferences =  PreferenceManager.getDefaultSharedPreferences(context);
        preferences.edit()
                .putInt(HOUR, hour)
                .putInt(MINUTE, minute)
                .apply();
        setAlarm(context);
    }


    @Override
    public void onReceive(Context context, Intent intent) {
        if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
            setAlarm(context);
            Toast.makeText(context, "Alarm set", Toast.LENGTH_LONG).show();
        }
    }

    private static void setAlarm(Context context) {
        int hour = getHour(context);
        int minute = getMinute(context);

        if(hour == -1 || minute == -1){
            //nenhum horário definido
            return;
        }
        //Cancela possiveis alarmes existentes
        cancelAlarm(context);

        Calendar calendar = getCalendar(hour, minute);

        //Se já passou
        if(isDateBeforeNow(calendar)){
            //adiciona um dia
            calendar.add(Calendar.DAY_OF_MONTH, 1);
        }else{
            //Alarme para o horário especificado
            setOneTimeAlarm(context, calendar);
            //adiciona um dia para repetir o alarme no dia seguinte
            calendar.add(Calendar.DAY_OF_MONTH, 1);
        }
        //Repete o alarme no dia seguinte
        setRepeatingAlarm(context, calendar);
    }

    private static void setRepeatingAlarm(Context context, Calendar calendar){
        PendingIntent pendingIntent = getPendingIntent(context, REPEATING_ID);

        AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);

        //Alarme que se repete todos os dias a uma determinada hora
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
                calendar.getTimeInMillis(),
                AlarmManager.INTERVAL_DAY,
                pendingIntent);
    }

    private static void setOneTimeAlarm(Context context, Calendar calendar){
        PendingIntent pendingIntent= getPendingIntent(context, ON_TIME_ID);

        AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);

        //Alarme para o horário especificado
        alarmManager.set(AlarmManager.RTC_WAKEUP,
                calendar.getTimeInMillis(),
                pendingIntent);
    }

    private static void cancelAlarm(Context context){
        AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
        alarmManager.cancel(getPendingIntent(context, ON_TIME_ID));
        alarmManager.cancel(getPendingIntent(context, REPEATING_ID));
    }

    private static PendingIntent getPendingIntent(Context context, int id){
        //PendingIntent para lançar o serviço
        Intent serviceIntent = new Intent(context, BootService.class);
        return PendingIntent.getService(context, id, serviceIntent, 0);
    }

    private static Calendar getCalendar(int hour, int minute){
        // Cria um Calendar para o horário especificado
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
        calendar.set(Calendar.HOUR_OF_DAY, hour);
        calendar.set(Calendar.MINUTE, minute);
        calendar.set(Calendar.SECOND, 0);
        return calendar;
    }

    private static int getHour(Context context){
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
        return preferences.getInt(HOUR, -1);
    }
    private static int getMinute(Context context){
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
        return preferences.getInt(MINUTE, -1);
    }

    private static boolean isDateBeforeNow(Calendar calendar){
        return calendar.getTimeInMillis() <= System.currentTimeMillis();
    }
}

BootService:

public class BootService  extends IntentService {

    private PowerManager.WakeLock wakeLock;

    public BootService() {
        super("name");
    }

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

        PowerManager pm = (PowerManager) this.getSystemService(Context.POWER_SERVICE);
        wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK |
                PowerManager.ACQUIRE_CAUSES_WAKEUP |
                PowerManager.ON_AFTER_RELEASE, "BootService");
        wakeLock.acquire();
    }

    @Override
    protected void onHandleIntent(@Nullable Intent intent) {
        NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this, "S")
                .setSmallIcon(R.drawable.casa)
                .setContentTitle("leklek")
                .setContentText("PARABENSSSSS CARALHOOOOOOOOOOO")
                .setPriority(NotificationCompat.PRIORITY_DEFAULT);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        if(wakeLock.isHeld()){
            //Verificou-se que o iluminar do ecrã
            //não acontecia devido ao WakeLock ser
            //rapidamente libertado(apesar de PowerManager.ON_AFTER_RELEASE !?).
            try {
                //Atrasa a libertação do WakeLock
                //de forma a permitir a iluminação do ecrâ.
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            finally {
                wakeLock.release();
            }
        }
    }
}

Manifest:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.aleander.ma_e">
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
    <application
        android:name=".aguacasatodosmetodos.crud.crud.Myapp"
        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">
        <service android:name=".luzcasatodosmetodos.BootService"/>
        <receiver android:name=".luzcasatodosmetodos.StartUpBootReceiver">    </receiver>
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity android:name=".Agua" />
        <activity android:name=".Luz" />
        <activity android:name=".aguaempresatodosmetodos.EscolhaAguaEmpresa" />
        <activity android:name=".aguacasatodosmetodos.crud.EscolhaAguaCasa" />
        <activity android:name=".luzcasatodosmetodos.EscolhaLuzCasa" />
        <activity android:name=".luzempresatodosmetodos.EscolhaLuzEmpresa" />
        <activity android:name=".aguacasatodosmetodos.crud.aguacasa.alto" />
        <activity android:name=".aguacasatodosmetodos.crud.aguacasa.medio" />
        <activity android:name=".aguacasatodosmetodos.crud.aguacasa.baixo" />
        <activity android:name=".aguaempresatodosmetodos.aguaempresa.medioaguaempresa" />
        <activity android:name=".aguaempresatodosmetodos.aguaempresa.baixoaguaempresa" />
        <activity android:name=".aguaempresatodosmetodos.aguaempresa.altoaguaempresa" />
        <activity android:name=".luzcasatodosmetodos.luzcasa.luzcasaalto" />
        <activity android:name=".luzcasatodosmetodos.luzcasa.luzcasabaixo" />
        <activity android:name=".luzcasatodosmetodos.luzcasa.luzcasamedio" />
        <activity android:name=".luzempresatodosmetodos.luzempresa.luzempresaalto" />
        <activity android:name=".luzempresatodosmetodos.luzempresa.luzempresamedio" />
        <activity android:name=".luzempresatodosmetodos.luzempresa.luzempresabaixo" />
    </application>
</manifest>
No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.