Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在两个不同的块中访问相同的挂起内容_Android_Android Intent_Scope_Alarmmanager_Android Pendingintent - Fatal编程技术网

Android 在两个不同的块中访问相同的挂起内容

Android 在两个不同的块中访问相同的挂起内容,android,android-intent,scope,alarmmanager,android-pendingintent,Android,Android Intent,Scope,Alarmmanager,Android Pendingintent,我有两个按钮save and set alarm和cancelalarm,它们完全按照它们的建议执行 我在onCreate()中有以下3行代码 问题 这样声明不会显示任何异常,但它不会让我达到所需的结果。我想在两个不同的代码块中使用相同的pendingent、AlarmManager和Intent,即保存和设置报警和取消的onClickListener() 注意:我不能把这3个放在上面onCreate(),因为它抛出componentinfo nullpointerexception 问题 因此

我有两个按钮
save and set alarm
cancel
alarm,它们完全按照它们的建议执行

我在
onCreate()
中有以下3行代码

问题

这样声明不会显示任何异常,但它不会让我达到所需的结果。我想在两个不同的代码块中使用相同的
pendingent
AlarmManager
Intent
,即
保存和设置报警
取消
onClickListener()

注意:我不能把这3个放在上面
onCreate()
,因为它抛出
componentinfo nullpointerexception

问题

因此,我需要在两个不同的块中访问相同的
pendingent
AlarmManager
Intent
。如何实现这一点

p.S

1.我试图使它们
静态
,但这不起作用


2.如果我不使用相同的
pendingent
则无法达到预期的结果(即设置和取消报警)。

给定您的代码示例,您只需返回一个相同的pendingent即可设置报警并取消报警。您列出的getBroadcast行将允许您执行以下操作:

PendingIntent.getBroadcast(getApplicationContext(), 2, alarmintent, PendingIntent.FLAG_UPDATE_CURRENT |  Intent.FILL_IN_DATA);
有关更完整的示例,请参见以下IntentSender和AlarmReceiver类:

public class IntentSender extends Activity {

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

        Button setAlarmButton = (Button) findViewById(R.id.set_alarm_button);
        Button cancelAlarmButton = (Button) findViewById(R.id.cancel_alarm_button);

        setAlarmButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                final Intent alarmintent = new Intent(IntentSender.this, AlarmReceiver.class);
                final AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
                final PendingIntent sender1 = getPendingIntent(alarmintent);

                alarmManager.set(AlarmManager.RTC, System.currentTimeMillis() + 2000, sender1);
            }
        });

        cancelAlarmButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                final Intent alarmintent = new Intent(IntentSender.this, AlarmReceiver.class);
                final AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
                final PendingIntent sender1 = getPendingIntent(alarmintent);

                alarmManager.cancel(sender1);
            }
        });
    }

    private PendingIntent getPendingIntent(final Intent alarmintent) {
        return PendingIntent.getBroadcast(getApplicationContext(), 2, alarmintent, PendingIntent.FLAG_UPDATE_CURRENT |
                                                                                   Intent.FILL_IN_DATA);
    }
}

public class AlarmReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "Received the broadcast!", Toast.LENGTH_SHORT).show();
    }
}
这是一个带有两个按钮的布局,您可以单击它们来设置和取消报警:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/set_alarm_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Set Alarm" />

    <Button
        android:id="@+id/cancel_alarm_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Cancel Alarm" />

</LinearLayout>


去试试这个吧。单击“设置警报”按钮,等待2秒钟,您应该会看到祝酒词。对于第二个测试,单击“设置报警”,然后快速单击“取消报警”。您不应该看到Toast消息。

感谢您提供了这段宝贵的代码片段和信息。是的,它确实对我有用。现在我正在成功设置和取消警报。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/set_alarm_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Set Alarm" />

    <Button
        android:id="@+id/cancel_alarm_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Cancel Alarm" />

</LinearLayout>