2013-06-21 48 views
0

我已經可以在通知欄中顯示圖標,如下面的代碼所示。我想在用戶點擊此圖標時開始一項新活動(myclass),但我不知道如何執行此操作。我應該把意圖放在哪裏?通知圖標點擊開始新活動

public class NotificationActivity extends Activity { 
    AlarmManager am; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_notification); 
     am = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
     setRepeatingAlarm(); 
    } 

    public void setRepeatingAlarm() { 
     Intent intent = new Intent(this, TimeAlarm.class); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, 
      intent, PendingIntent.FLAG_CANCEL_CURRENT); 
     am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 
      (20 * 1000), pendingIntent); 
     System.out.println("Calling Alaram..."); 
    } 
} 



public class BootUpReciever extends BroadcastReceiver { 
    NotificationManager nm; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     System.out.println("in broad...."); 

     nm = (NotificationManager) context .getSystemService(Context.NOTIFICATION_SERVICE); 
     CharSequence from = "Lokesh"; 
     CharSequence message = "Notification Test..."; 
     PendingIntent contentIntent = PendingIntent.getActivity(context, 0, 
      new Intent(), 0); 
     Notification notif = new Notification(R.drawable.cherry_icon, 
      "Notification Test...", System.currentTimeMillis()); 
     notif.setLatestEventInfo(context, from, message, contentIntent); 
     nm.notify(1, notif); 

     if ((intent.getAction() != null) && 
       (intent.getAction().equals("android.intent.action.BOOT_COMPLETED"))) 
     { 
      System.out.println("in broadcast receiver....."); 
      Intent i = new Intent(context, MainActivity.class); 
      i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      context.startActivity(i); 
     } 
    } 
} 
+0

你有沒有在清單中聲明你的新活動? @NiceGuy – SamDroid

+0

是宣言,但我把意圖放在這個代碼中,當點擊通知欄上的圖標時開始新的活動? –

+1

檢查這個問題: http://stackoverflow.com/questions/10184351/how-to-start-activity-when-user-clicks-a-notification –

回答

1

您向「通知」構建器提供的掛起意向應該包含一個意向,該意向將在用戶單擊通知時啓動活動。您需要創建一個意圖發動你的活動之一:

Intent resultIntent = new Intent(this, ResultActivity.class); 

然後你讓使用的PendingIntent此意圖:

PendingIntent resultPendingIntent = 
     stackBuilder.getPendingIntent(
      0, 
      PendingIntent.FLAG_UPDATE_CURRENT 
     ); 

,然後創建使用它的通知。當用戶點擊您的通知時,ResultActivity將啓動。

整個代碼片段:

NotificationCompat.Builder mBuilder = 
     new NotificationCompat.Builder(this) 
     .setSmallIcon(R.drawable.notification_icon) 
     .setContentTitle("My notification") 
     .setContentText("Hello World!"); 

// Creates an explicit intent for an Activity in your app 
Intent resultIntent = new Intent(this, ResultActivity.class); 

// The stack builder object will contain an artificial back stack for the 
// started Activity. 
// This ensures that navigating backward from the Activity leads out of 
// your application to the Home screen. 
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); 

// Adds the back stack for the Intent (but not the Intent itself) 
stackBuilder.addParentStack(ResultActivity.class); 

// Adds the Intent that starts the Activity to the top of the stack 
stackBuilder.addNextIntent(resultIntent); 
PendingIntent resultPendingIntent = 
     stackBuilder.getPendingIntent(
      0, 
      PendingIntent.FLAG_UPDATE_CURRENT 
     ); 
mBuilder.setContentIntent(resultPendingIntent); 
NotificationManager mNotificationManager = 
    (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

// mId allows you to update the notification later on. 
mNotificationManager.notify(mId, mBuilder.build()); 

去通過開發者文檔的詳細文章很好的解釋: https://developer.android.com/guide/topics/ui/notifiers/notifications.html

+0

不錯的解決方案,但這隻適用於如果你有多個活動,如果你只有一個,而這一個是singleInstance,則只有在後臺將活動置於前景時,通知纔會使屏幕保持空白。 – uiltonsantos