2016-04-01 2 views
2

Ich bin ein Neuling in Android. Heute habe ich versucht, mit AlarmManage für meine Erinnerungsanwendung zu arbeiten, die Benutzern erlaubt, Stunde und Minuten einzugeben, um Benachrichtigung anzuzeigen, und ich habe einige Probleme damit. 1. Das erste Problem ist, wenn die Benachrichtigung erscheint, es vibriert nur und hatte keinen Ton, obwohl ich Sound-Standard für die Benachrichtigung und Einstellung erlauben Ton für mein Telefon eingestellt habe. 2. Wenn ich die Anwendung schließe, wenn ich bei der Benachrichtigung berühre, wird die MainActivity angezeigt und der AlarmManager funktioniert wieder, so dass meine Anwendung die Benachrichtigung erneut anzeigt. Aber wenn ich bei der Benachrichtigung berühre, wenn die Anwendung geöffnet wird, wird die Benachrichtigung nicht angezeigt. also möchte ich meine Bewerbung nur einmal benachrichtigen. Wie kann ich es tun ?. 3. Obwohl ich Zeit für die Erinnerung gesetzt habe, aber wenn ich die Anwendung geschlossen habe, erscheint irgendwann mein Telefon Benachrichtigung meiner Erinnerung Anwendung zu der Zeit, die ich nie eingestellt habe. Wie kann ich dieses Problem beheben?Wie man AlarmManager beim Start der Aktivität stoppt

MyAlarmService

private NotificationManager mManager; 

@Override 
public IBinder onBind(Intent arg0) 
{ 
    // TODO Auto-generated method stub 
    return null; 
} 

@Override 
public void onCreate() 
{ 
    // TODO Auto-generated method stub 
    super.onCreate(); 
} 

@SuppressWarnings("static-access") 
@Override 
public void onStart(Intent intent, int startId) 
{ 
    super.onStart(intent, startId); 
    // Toast.makeText(this, "I'm running", Toast.LENGTH_SHORT).show(); 
    long[] v = {500,1000}; 
    NotificationCompat.Builder mBuilder = 
      new NotificationCompat.Builder(this) 
        .setVibrate(v) 
        .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)) 
        .setSmallIcon(R.drawable.ic_remind) 
        .setContentTitle("My notification") 
     .setContentText("This is a test message!"); 
    mBuilder.setSound(Settings.System.DEFAULT_NOTIFICATION_URI); 
    mBuilder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)); 
    mBuilder.setAutoCancel(true); 
    Intent intent1 = new Intent(this.getApplicationContext(),MainActivity.class); 
    intent1.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP); 

    TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); 
    stackBuilder.addParentStack(MainActivity.class); 
    stackBuilder.addNextIntent(intent1); 



    PendingIntent pendingNotificationIntent = PendingIntent.getActivity(this.getApplicationContext(),0, intent1,PendingIntent.FLAG_UPDATE_CURRENT); 
    mBuilder.setContentIntent(pendingNotificationIntent); 
    mManager =(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

    mManager.notify(0, mBuilder.build()); 

} 

@Override 
public void onDestroy() 
{ 
    // TODO Auto-generated method stub 
    super.onDestroy(); 
} 

Receiver

public void onReceive(Context context, Intent intent) 
{ 
    Intent service1 = new Intent(context, MyAlarmService.class); 
    context.startService(service1); 
} 

MainActivity

super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    final EditText edt_hours = (EditText)findViewById(R.id.edt_hour); 
    final EditText edt_minutes = (EditText)findViewById(R.id.edt_minutes); 
    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Calendar calendar = Calendar.getInstance(); 
      calendar.setTimeInMillis(System.currentTimeMillis()); 
      calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(edt_hours.getText().toString())); 
      calendar.set(Calendar.MINUTE, Integer.parseInt(edt_minutes.getText().toString())); 
      //calendar.set(Calendar.SECOND,0); 

      Intent myIntent = new Intent(MainActivity.this, MyReceiver.class); 
      pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, myIntent,0); 

      alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
      alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent); 

     } 
    }); 



} //end onCre 

p/s: Es tut mir leid, wenn meine Frage nicht klar ist, weil mein Englisch nicht gut ist. Und ich möchte Ihnen für jeden danken, der diese Frage gelesen hat.

Antwort

3

Hier ist mein Beispielcode. Ich denke, es wird dir helfen.

MainActivity

public static int NOW_NOTIFICATION = 101; 

Intent intent = new Intent(MainActivity.this, NotificationReceiver.class); 
       intent.putExtra(NotificationReceiver.NOTIFICATION_MESSAGE, "Sample Alert"); 
       PendingIntent pendingIntent = PendingIntent.getBroadcast(
         MainActivity.this, NOW_NOTIFICATION, intent, PendingIntent.FLAG_ONE_SHOT); 

       cancelNotification(NOW_NOTIFICATION); 
       AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
       alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() 
         + (2 * 1000), pendingIntent); 

Abbrechen der Benachrichtigung:

public void cancelNotification(int requestCode) { 
     try { 
      Intent notificationIntent = new Intent(getApplicationContext(), NotificationReceiver.class); 
      PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), requestCode, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
      AlarmManager alarmManager = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE); 
      alarmManager.cancel(pendingIntent); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

NotificationReceiver:

public class NotificationReceiver extends BroadcastReceiver { 
    public static String NOTIFICATION_MESSAGE = "notificationMessage"; 


    @Override 
    public void onReceive(Context context, Intent intent) { 
     String message = intent.getStringExtra(NOTIFICATION_MESSAGE); 
     NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
     //Define sound URI 
     Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 

     Intent notificationIntent = new Intent(context, EmptyActivity.class); 
     notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 

     PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0); 
     final DateTime dateTime = DateTime.now(); 
     int color = 0xffffaa00; 
//  int color1 = context.getColor(R.color.notificatinBackgroundColor); 
     NotificationCompat.Builder builder = new NotificationCompat.Builder(context); 
     builder.setSmallIcon(R.drawable.festi_push_message_small); 
     builder.setContentIntent(pendingIntent); 
     builder.setContentTitle("Notification Sample"); 
     builder.setAutoCancel(true); 
     builder.setContentText(message + ", Current Time : " + dateTime.getHourOfDay() + ":" + dateTime.getMinuteOfHour() + ":" + dateTime.getSecondOfMinute()); 
     builder.setSound(soundUri); 
     builder.setLights(Color.RED, 1000, 1000); 
     builder.setColor(color); 


     Notification notification = builder.build(); 

     notification.flags |= Notification.FLAG_AUTO_CANCEL; 

     notificationManager.notify(102938, notification); 
    } 

} 

AndroidManifest.xml

<receiver android:name=".NotificationReceiver" /> 
+0

danke dir, bro, es funktioniert perfekt. Aber ich weiß nicht, warum mein Code nicht funktioniert hat. Und in Ihrem Code funktioniert der Sound immer noch nicht –

+0

Sorry mein Fehler, Verwenden Sie diese "Intent Intent = neue Absicht (MainActivity.this, NotificationReceiver.class);" statt "Intent intent = new Intent (MainActivity.this, AlarmReceiver.class);" in MainActivity. Und jetzt versuche es noch einmal – Sabari

+0

Ich benutze deinen Code aber der Sound funktioniert immer noch nicht :(. Ich denke, dieses Problem ist mein Handy :(. Bcuz ich versuche, einige app die gleichen in CHplay. ANd der Sound nicht working.thanks you for answer:) –