2017-05-04 191 views
0

您好,我正在寻找关于如何关闭闹钟的问题,但没有任何帮助。我有两个开关按钮和报警可以正常开始,但我无法关闭它。如何关闭闹钟时钟

我AlarmActivity

public class AlarmActivity extends Activity { 

AlarmManager alarmManager; 
private PendingIntent pendingIntent; 
private TimePicker alarmTimePicker; 
private static AlarmActivity inst; 
private TextView alarmTextView; 
Button on, off; 

public static AlarmActivity instance() { 
    return inst; 
} 

@Override 
public void onStart() { 
    super.onStart(); 
    inst = this; 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_my); 
    alarmTimePicker = (TimePicker) findViewById(R.id.alarmTimePicker); 
    alarmTextView = (TextView) findViewById(R.id.alarmText); 
    Button on = (Button) findViewById(R.id.zapni); 
    Button off = (Button) findViewById(R.id.vypni); 
    alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 


    on.setOnClickListener(new View.OnClickListener() { 
     @TargetApi(Build.VERSION_CODES.M) 

     @Override 
     public void onClick(View v) { 

      Log.d("MyActivity", "Alarm On"); 
      Calendar calendar = Calendar.getInstance(); 
      calendar.set(Calendar.HOUR_OF_DAY, alarmTimePicker.getCurrentHour()); 
      calendar.set(Calendar.MINUTE, alarmTimePicker.getCurrentMinute()); 
      Intent myIntent = new Intent(AlarmActivity.this, AlarmReceiver.class); 
      pendingIntent = PendingIntent.getBroadcast(AlarmActivity.this, 0, myIntent, 0); 
      alarmManager.set(AlarmManager.RTC, calendar.getTimeInMillis(), pendingIntent); 


     } 

    }); 

    off.setOnClickListener(new View.OnClickListener() { 
     @TargetApi(Build.VERSION_CODES.M) 



     @Override 
     public void onClick(View v) { 

      Intent intent = new Intent(getApplicationContext(), AlarmReceiver.class); 

      PendingIntent pIntent = PendingIntent.getBroadcast(getApplicationContext(), 1253, intent,0); 
      AlarmManager aManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
      aManager.cancel(pIntent); 

      Log.d("MyActivity", "Alarm Off"); 

     } 

    }); 


} 

我AlarmReciever类

public class AlarmReceiver extends WakefulBroadcastReceiver { 

@Override 
public void onReceive(final Context context, Intent intent) { 

    AlarmActivity inst = AlarmActivity.instance(); 
    inst.setAlarmText("Alarm! Wake up! Wake up!"); 


    Uri alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM); 
    if (alarmUri == null) { 
     alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
    } 
    Ringtone ringtone = RingtoneManager.getRingtone(context, alarmUri); 
    ringtone.play(); 


    ComponentName comp = new ComponentName(context.getPackageName(), 
      AlarmService.class.getName()); 
    startWakefulService(context, (intent.setComponent(comp))); 
    setResultCode(Activity.RESULT_OK); 
} 

}

我AlarmService类

public class AlarmService extends IntentService { 
private NotificationManager alarmNotificationManager; 

public AlarmService() { 
    super("AlarmService"); 
} 

@Override 
public void onHandleIntent(Intent intent) { 
    sendNotification("Wake Up! Wake Up!"); 
} 

private void sendNotification(String msg) { 
    Log.d("AlarmService", "Preparing to send notification...: " + msg); 
    alarmNotificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE); 

    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this, AlarmActivity.class), 0); 

    NotificationCompat.Builder alamNotificationBuilder = new NotificationCompat.Builder(this) 
      .setContentTitle("Alarm") 
      .setStyle(new NotificationCompat.BigTextStyle().bigText(msg)) 
      .setContentText(msg) 
      .setSmallIcon(R.mipmap.ic_launcher); 

    alamNotificationBuilder.setContentIntent(contentIntent); 
    alarmNotificationManager.notify(1, alamNotificationBuilder.build()); 
    Log.d("AlarmService", "Notification sent."); 
} 

}

也有一些是错误的,我认为

off.setOnClickListener(new View.OnClickListener() { 
    @TargetApi(Build.VERSION_CODES.M) 



    @Override 
    public void onClick(View v) { 

     Intent intent = new Intent(getApplicationContext(), AlarmReceiver.class); 

     PendingIntent pIntent = PendingIntent.getBroadcast(getApplicationContext(), 1253, intent,0); 
     AlarmManager aManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
     aManager.cancel(pIntent); 

     Log.d("MyActivity", "Alarm Off"); 

    } 

}); 

回答

0

试试这个代码片段,

Intent intent = new Intent(getApplicationContext(), AlarmReceiver.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 1253, intent, PendingIntent.FLAG_UPDATE_CURRENT| Intent.FILL_IN_DATA); 
    AlarmManager aManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
    aManager.cancel(pendingIntent); 
+0

'的PendingIntent的PendingIntent = PendingIntent.getBroadcast(getApplicationContext(),1253,intent,PendingIntent.FLAG_UPDATE_CURRENT | Intent.FILL_IN_DATA);'我没有使用这个代码。因为它抛出一些错误,但仍然没有 – erikkockar

+0

发送错误,所以我们可以看到有什么问题 –

+0

当我写有this.getApplicationContext()它会引发此错误 无法解析方法'getApplicationContext()'但是当我删除这个。它可以工作,但报警仍然不想关闭 – erikkockar

0
PendingIntent pIntent = PendingIntent.getBroadcast(getApplicationContext(),1253, intent,0); 
AlarmManager aManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
aManager.cancel(pIntent); 
stopService(new Intent(AlarmActivity.this, AlarmReceiver.class)); 

你托盘一样,它也可以帮助其他明智的参考this.

+0

仍然没有,但是,谢谢 – erikkockar

+0

闹钟仍在播放,但我无法关闭它 – erikkockar