【问题标题】:Android Studio: how to use putExtraAndroid Studio:如何使用 putExtra
【发布时间】:2020-02-29 18:40:57
【问题描述】:

我有一个警报应用程序,我希望将int 传递给带有intent 的警报接收器,但由于某种原因,AlarmReceiver 类没有获得intentintEditText 输入

这里的变量是在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);
}

感谢您的帮助。

【问题讨论】:

  • 一般编程问题请不要使用IDE标签,
  • “AlarmReceiver 类没有得到意图”是什么意思?活动根本没有启动?还是 int extra 不存在?
  • 我的意思是 put extra 不起作用。对不起,不准确

标签: java android android-studio android-intent


【解决方案1】:

发送数据

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

获得价值

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

【讨论】:

    【解决方案2】:

    请尝试这样: 当你想改变你的活动时开始活动(你的意图)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-24
      • 1970-01-01
      相关资源
      最近更新 更多