Android Studio: как использовать putExtra - PullRequest
0 голосов
/ 29 февраля 2020

У меня есть приложение тревоги, где я хочу, чтобы int был передан получателю тревоги с intent, но по некоторым причинам класс AlarmReceiver не получает intent. int вводится с помощью EditText

здесь переменные были созданы в MainActivity

private int intToPass;
public static final String MyPREFERENCES = "MyPrefs";
private static long intervall = 500;
private String myEnteredText;
private AlarmManager am;
private Intent intent;
private PendingIntent pendingIntent;

здесь код для кнопки аварийной установки в MainActivity:

mStartBtn1.setOnClickListener(new View.OnClickListener() { 

            public void onClick(View view) {

                //Variables
                AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
                long time;

                intent = new Intent(MainActivity.this, AlarmReceiverActivity.class);
                pendingIntent = PendingIntent.getActivity(MainActivity.this, 2, intent, PendingIntent.FLAG_CANCEL_CURRENT);
                am = (AlarmManager) getSystemService(ALARM_SERVICE); 

                //Save
                SharedPreferences prefs = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
                myEnteredText = scoreEnter.getText().toString();
                SharedPreferences.Editor editor = prefs.edit();
                editor.putString("sharedPrefKey", myEnteredText);
                editor.apply();

                if (((ToggleButton) view).isChecked()) {
                    try {

                        intToPass = Integer.parseInt(scoreEnter.getText().toString());

                        //Calendar
                        Calendar calendar = Calendar.getInstance();
                        calendar.set(Calendar.HOUR_OF_DAY, timePicker1.getCurrentHour());
                        calendar.set(Calendar.MINUTE, timePicker1.getCurrentMinute());

                        //Extra
                        intent.putExtra("Test", intToPass);

                        //hour format
                        time = (calendar.getTimeInMillis() - (calendar.getTimeInMillis() % 60000));
                        if (System.currentTimeMillis() > time) {
                            if (calendar.AM_PM == 0)
                                time = time + (1000 * 60 * 60 * 12);
                            else
                                time = time + (1000 * 60 * 60 * 24);
                        }

                        //Set alarm

                        am.setRepeating(AlarmManager.RTC_WAKEUP, time, intervall, pendingIntent);

                        if (mToast != null) {
                            mToast.cancel();
                        }
                        mToast = Toast.makeText(getApplicationContext(), "Alarm Set", Toast.LENGTH_LONG);
                        mToast.show();
                    } catch (NumberFormatException nfe) {
                        mToast = Toast.makeText(MainActivity.this, "Enter number", Toast.LENGTH_LONG);
                        mToast.show();
                        ((ToggleButton) view).setChecked(false);
                    }
                } else {
                    if (am!=null){
                    repam.cancel(pendingIntent);
                    Toast.makeText(MainActivity.this, "ALARM OFF", Toast.LENGTH_SHORT).show();
                }
                }
            }
        });

Это AlarmReceiver класс

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

    PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
    mWakelock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "wecker:myWakeLog");
    mWakelock.acquire();
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN |
                    WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
                    WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON,
            WindowManager.LayoutParams.FLAG_FULLSCREEN |
                    WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
                    WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

    Intent intent = getIntent();
    intToReceive = intent.getIntExtra("Test", 30);
    setContentView(alarmView);
}

Спасибо за помощь.

Ответы [ 2 ]

0 голосов
/ 29 февраля 2020

Пожалуйста, попробуйте так: startActivity (ваше намерение), когда вы хотите изменить свою деятельность

0 голосов
/ 29 февраля 2020

Для отправки данных

intent = new Intent(FROM, TO).putExtras("key","value");

Для получения значения

String value= getIntent().getStringExtra("key");
...