Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.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中重用-为什么我不能设置一个重复警报,并使用同一个PendingEvent实例取消它?_Android_Field_Reusability_Android Pendingintent - Fatal编程技术网

在Android中重用-为什么我不能设置一个重复警报,并使用同一个PendingEvent实例取消它?

在Android中重用-为什么我不能设置一个重复警报,并使用同一个PendingEvent实例取消它?,android,field,reusability,android-pendingintent,Android,Field,Reusability,Android Pendingintent,在同一活动中将onClick in activity_main.xml绑定为将报警设置为一个按钮,并将报警取消设置为另一个按钮时,单击链接到取消设置报警方法的按钮时,以下代码将不允许您取消设置报警 ...package name and includes ommitted... public class MainActivity extends Activity { private AlarmManager alarmManager; private PendingInten

在同一活动中将onClick in activity_main.xml绑定为将报警设置为一个按钮,并将报警取消设置为另一个按钮时,单击链接到取消设置报警方法的按钮时,以下代码将不允许您取消设置报警

...package name and includes ommitted...

public class MainActivity extends Activity {

    private AlarmManager alarmManager;
    private PendingIntent notifyIntent;
    private static final String TAG = "MainActivity";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
    }


    public void setAlarm(View v) {
        Intent myIntent = new Intent(MainActivity.this,
                NotificationService.class);

        notifyIntent = PendingIntent.getService(MainActivity.this, 0,
                myIntent, 0);
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.MINUTE, 1);
        Log.v(TAG, "time for alarm trigger:" + calendar.getTime().toString());
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
                calendar.getTimeInMillis(), 1 * 60 * 1000, notifyIntent);
    }

    public void unsetAlarm(View v) {
        alarmManager.cancel(notifyIntent);
        Log.v(TAG, "cancelling notification");
    }

}
解决方案是,正如我在“未设置报警”方法中重新创建PendingEvent中所提供的那样:

  public void unsetAlarm(View v) {
     Intent myIntent = new Intent(MainActivity.this,
            NotificationService.class);
    notifyIntent = PendingIntent.getService(MainActivity.this, 0,
            myIntent, 0);  // recreate it here before calling cancel

    alarmManager.cancel(notifyIntent);
    Log.v(TAG, "cancelling notification");
} 
我的问题是:为什么我不能重用pendingent,它存储在第一个代码片段的notifyIntent字段中?为什么我必须重新创建才能取消它?我已经将MainActivity的属性设置为android:launchMode=singleInstance,所以当我单击NotificationService中创建的通知时,我应该相信它使用的是同一个实例,我已经通知了它,但它只是显示了一个通知