2016-05-03 18 views
0

Ich entwickle eine flashLight App und ich stellte ein Problem in der Benachrichtigung, die ist: Wenn ich den Benachrichtigungstext drücke ich möchte Flash und schließen Sie das Ganze app, Wie kann ich die Benachrichtigungsmethode ändern, um das zu tun? Ich habe versucht, Anthor-Aktivität zu machen und Abwendung von und schließen App-Methoden in es, aber es funktioniert nicht. bitte hilfe und danke im voraus.wie man drückt auf den Benachrichtigungstext schließen die App nicht öffnen andere Aktivität

dies ist meine Benachrichtigungsmethode

public void getNotification() 
{ 
    Intent intent = new Intent(); 
    PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent , PendingIntent.FLAG_CANCEL_CURRENT); 

    NotificationCompat.Builder builder = new NotificationCompat.Builder(this) 
      .setContentIntent(pIntent) 
      .setContentTitle(res.getString(R.string.notification_title)) 
      .setContentText(res.getString(R.string.notification_text)) 
      .setSmallIcon(R.drawable.icon) 
      .setAutoCancel(true) 
      .setTicker(getString(R.string.notification_ticker_msg)); 
    // Build the notification: 
    Notification notification = builder.build(); 

    // Get the notification manager: 
    NotificationManager notificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); 

    // Publish the notification: 
    final int notificationId = 0; 
    notificationManager.notify(notificationId, notification); 
} 

Antwort

0

glaube ich können Sie finish() auf Ihrer Aktivität verwenden, wenn die Benachrichtigung gedrückt Ils.

EDIT: How to close any activity of my application by clicking on a notification?

+0

Eine Taschenlampe App ist in der Regel eine Eins-Aktivität-App. Wenn Sie mehr als eine Aktivität haben, ist der von Ihnen gepostete Link hilfreich (aber als Link sollte er als Kommentar gepostet werden, nicht als Antwort). Wenn Sie nur eine Aktivität beenden möchten, sind die vorgeschlagenen Methoden viel zu teuer. – 0X0nosugar

1

Wenn Sie die gleiche Activity verwenden, dann ist die onCreate Methode erneut aufgerufen werden. Sie können eine extra mit Ihrer Intent senden, die anzeigt, dass es sich um eine Intent handelt, die aus dem Klick der Benachrichtigung generiert wird. Überprüfen Sie in Ihrem ActivityonCreate auf dieses Extra und rufen Sie finish(), wenn es vorhanden ist.

public void getNotification() { 
    Intent intent = new Intent(this, FlashActivity.class); 
    intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
    intent.putExtra("origin", "notification"); 

    PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent , PendingIntent.FLAG_CANCEL_CURRENT); 

    NotificationCompat.Builder builder = new NotificationCompat.Builder(this) 
      .setContentIntent(pIntent) 
      .setContentTitle(res.getString(R.string.notification_title)) 
      .setContentText(res.getString(R.string.notification_text)) 
      .setSmallIcon(R.drawable.icon) 
      .setAutoCancel(true) 
      .setTicker(getString(R.string.notification_ticker_msg)); 
    // Build the notification: 
    Notification notification = builder.build(); 

    // Get the notification manager: 
    NotificationManager notificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); 

    // Publish the notification: 
    final int notificationId = 0; 
    notificationManager.notify(notificationId, notification); 
} 

Und in Ihrer onCreate Methode in FlashActivity die extra überprüfen.

@Override 
public void onCreate(Bundle savedInstanceState) { 
    ... 

    if("notification".equals(getIntent().getStringExtra("origin"))) { 
     finish(); 
    } 
} 
+0

Sie haben vom OP "Intent intent = new Intent();" kopiert. - vielleicht besser etwas wie "Intent intent = new Intent (this, MyActivity.class);" – 0X0nosugar

+0

Richtig, und sogar ich glaube, es ist besser für sie, FLAG_ACTIVITY_SINGLE_TOP oder FLAG_ACTIVITY_SINGLE_TASK zu verwenden. – jaibatrik

+0

Lassen Sie mich die Antwort bearbeiten. – jaibatrik

0

Sie möchten PendingIntent verwenden.

Intent resultIntent = new Intent(this, MainActivity.class); 
resultIntent.putExtra("FINISH",true); 
PendingIntent resultPendingIntent = 
     PendingIntent.getActivity(
     this, 
     0, 
     resultIntent, 
     PendingIntent.FLAG_UPDATE_CURRENT 
    ); 

builder.setContentIntent(resultPendingIntent); 

// Build the notification: 
    Notification notification = builder.build(); 
//rest of your methods to show notification 

In Ihrem MainActivity Update je nach Code

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    onNewIntent(getIntent()); 
} 

@Override 
public void onNewIntent(Intent intent){ 
    setContentView(R.layout.activity_main); 
    Bundle extras = intent.getExtras(); 
    if(extras != null){ 
     if(extras.containsKey("FINISH")) 
     { 
      finish(); 
     } 
    } 


}