【问题标题】:android How to start activity when user clicks a notification?android 当用户点击通知时如何启动活动?
【发布时间】:2015-07-15 10:49:19
【问题描述】:

我想在用户点击通知时打开活动。我知道这个问题是重复的,但我在这里找不到解决方案

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

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

// Because clicking the notification opens a new ("special") activity, there's
// no need to create an artificial back stack.
PendingIntent resultPendingIntent =
    PendingIntent.getActivity(
    this,
    0,
    resultIntent,
    PendingIntent.FLAG_UPDATE_CURRENT
);

mBuilder.setContentIntent(resultPendingIntent);
// Sets an ID for the notification
int mNotificationId = 001;
// Gets an instance of the NotificationManager service
NotificationManager mNotifyMgr = 
    (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
// Builds the notification and issues it.
mNotifyMgr.notify(mNotificationId, mBuilder.build());

我关注的是documentation。有人有什么主意吗?为什么ResultActivity打不开?

【问题讨论】:

    标签: android notifications android-pendingintent


    【解决方案1】:

    参考此参考链接获取解决方案

    Start activity once notification clicked

    Open application after clicking on Notification

    Clicking on Notification is not starting intended activity?

    所有这些都包含在点击通知时打开活动的公认解决方案。

    所以,请正确参考并获得结果,现在您的问题已得到解决。

    感谢问题的块所有者以及接受的答案提供者。因为它对许多面临此类问题的开发人员很有用

    【讨论】:

    【解决方案2】:

    这是我的最终解决方案:

    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(YourService.this)
                .setContentTitle(getResources().getText(R.string.app_name))
                .setContentText(getServiceStateDescription(HomeBridgeService.this))
                .setSmallIcon(iconId)
                .setWhen(System.currentTimeMillis());
    
        Intent nIntent = getPreviousIntent();
        TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
        // Adds the back stack
        stackBuilder.addParentStack(MainActivity_.class);
        stackBuilder.addNextIntent(nIntent);
        PendingIntent pendingIntent =
                stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
        notificationBuilder.setContentIntent(pendingIntent);
    
        startForeground(ContextConstants.LAUNCHER_SERVICE_NOTE_ID, notificationBuilder.build());
    
    
    private Intent getPreviousIntent() {
        Intent newIntent = null;
        final ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            final List<ActivityManager.AppTask> recentTaskInfos = activityManager.getAppTasks();
            if (!recentTaskInfos.isEmpty()) {
                for (ActivityManager.AppTask appTaskTaskInfo: recentTaskInfos) {
                    if (appTaskTaskInfo.getTaskInfo().baseIntent.getComponent().getPackageName().equals(ContextConstants.PACKAGE_NAME)) {
                        newIntent = appTaskTaskInfo.getTaskInfo().baseIntent;
                        newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    }
                }
            }
        } else {
            final List<ActivityManager.RecentTaskInfo> recentTaskInfos = activityManager.getRecentTasks(1024, 0);
            if (!recentTaskInfos.isEmpty()) {
                for (ActivityManager.RecentTaskInfo recentTaskInfo: recentTaskInfos) {
                    if (recentTaskInfo.baseIntent.getComponent().getPackageName().equals(ContextConstants.PACKAGE_NAME)) {
                        newIntent = recentTaskInfo.baseIntent;
                        newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    }
                }
            }
        }
        if (newIntent == null) newIntent = new Intent();
        return newIntent;
    }
    

    【讨论】:

    • 请解释一下
    • @ShadabK 当用户点击通知时,我将显示来自 TaskBuilder 的最后一个意图。尝试阅读它。
    【解决方案3】:

    这是我的代码...它有效 这会带你去另一个活动 note.class

    package com.x.notifix;
    
    import android.app.TaskStackBuilder;
    import android.content.Context;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.app.NotificationManager;
    import android.app.PendingIntent;
    import android.content.Intent;
    import android.support.v4.app.NotificationCompat;
    import android.util.Log;
    import android.view.View;
    
    
    
    public class MainActivity extends AppCompatActivity {
    
        NotificationCompat.Builder notifix;
        private static final int xid = 12345;
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            notifix = new  NotificationCompat.Builder(this);
            notifix.setAutoCancel(true);
    
        }
    
    
    
        public void click (View view){
            notifix.setSmallIcon(R.drawable.x);
            notifix.setTicker(" hollup!! ");
            notifix.setWhen(System.currentTimeMillis());
            notifix.setContentTitle(" X-Noted !!");
            notifix.setContentText( " this is where you got Xed ..");
    
            Intent i = new Intent(this, note.class);
    
            PendingIntent pendingIntent = PendingIntent.getActivity(this , 1 , i , PendingIntent.FLAG_UPDATE_CURRENT);
            notifix.setContentIntent(pendingIntent);
    
            NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
            nm.notify(xid, notifix.build());
    
        }
    
    }
    

    【讨论】:

      【解决方案4】:

      在您的代码中,

      Intent resultIntent = new Intent(this, ResultActivity.class);//Here mention the class which you want to open.
      

      在未决意图中添加为FLAG_ACTIVITY_NEW_TASK

      PendingIntent resultPendingIntent =
          PendingIntent.getActivity(
          this,
          0,
          resultIntent,
          Intent.FLAG_ACTIVITY_NEW_TASK
      );
      

      【讨论】:

      【解决方案5】:

      使用 kotlin,

      val channelId = "My_Channel_id"
      val channelName = "My Channel"
      
      val resultIntent = Intent(this, MainActivity::class.java)
      val pendingIntent = TaskStackBuilder.create(this).run {
          addNextIntentWithParentStack(resultIntent)
          getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT)
      }
      
      var notificationBuilder = NotificationCompat.Builder(this, CHANNEL_ID)
          .setSmallIcon(R.drawable.notification_icon)
          .setContentTitle("My notification")
          .setContentText("Much longer text that cannot fit one line...")
          .setStyle(NotificationCompat.BigTextStyle()
          .bigText("Much longer text that cannot fit one line..."))
          .setPriority(NotificationCompat.PRIORITY_DEFAULT)
          .setContentIntent(pendingIntent)
      
      with(NotificationManagerCompat.from(this)){
          notify(1,  notificationBuilder.build())
      }
      

      这会创建一个通知,点击后会打开 MainActivity

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-16
        相关资源
        最近更新 更多