【问题标题】:Android call method on notification click通知点击的Android调用方法
【发布时间】:2012-12-11 15:03:37
【问题描述】:

此代码创建一个通知。如果点击它,则运行当前应用程序(intent 是在Entry 中创建的,这是我唯一的Activity),一个Android 开发者博客的略微修改版本:

private void makeIntent() {
    NotificationManager mgr = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    Notification note = new Notification(R.drawable.prev, "Status message!", System.currentTimeMillis());
    Intent intent = new Intent(this, Entry.class);
    PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0);
    note.setLatestEventInfo(this, "New Email", "Unread Conversation", pi);
    note.flags |= Notification.FLAG_AUTO_CANCEL;
    mgr.notify(NOTIFY_ME_ID, note);
}

但我不想启动任何活动,而只想在当前活动中运行一个方法。根据我目前所读到的内容,我想我必须使用startActivityForResult() 之类的方法,使用intent-filters 并实现onActivityResult(),但是在搞砸了所有这些事情之后,在Intent 和@987654328 中进行更改@,我仍然没有可用的结果。是否有可能以某种方式调用Entry 中的一个方法(我的主要Activity,其中创建了Intent),或者当我单击我新创建的Notification 时捕获任何传出或传入的Intents

PS。如果这是一个重复的线程,我很抱歉,所以现在很慢,我无法正确搜索。

【问题讨论】:

    标签: android android-intent android-activity android-notifications


    【解决方案1】:

    在清单文件中的activity 中添加android:launchMode="singleTop",使用protected void onNewIntent(Intent intent) { ... } 方法并使用以下代码:

    private static final int MY_NOTIFICATION_ID = 1;
    private NotificationManager notificationManager;
    private Notification myNotification;
    
    void notification() {   
        notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        myNotification = new Notification(R.drawable.next, "Notification!", System.currentTimeMillis());
        Context context = getApplicationContext();
        String notificationTitle = "Exercise of Notification!";
        String notificationText = "http://android-er.blogspot.com/";
        Intent myIntent = new Intent(this, YourActivity.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(YourActivity.this, 0, myIntent, Intent.FILL_IN_ACTION);
        myNotification.flags |= Notification.FLAG_AUTO_CANCEL;
        myNotification.setLatestEventInfo(context, notificationTitle, notificationText, pendingIntent);
        notificationManager.notify(MY_NOTIFICATION_ID, myNotification);
    }
    

    【讨论】:

    • 如前所述不要忘记添加 android:launchMode="singleTop"
    【解决方案2】:

    这对我来说 100% 有效:

    将此代码放在方法中:

    Intent intent = new Intent(this, YourClass.class);
        intent.putExtra("NotiClick",true);
        PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    
     if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
            Notification Noti;
            Noti = new Notification.Builder(this)
                    .setContentTitle("YourTitle")
                    .setContentText("YourDescription")
                    .setSmallIcon(R.mipmap.ic_launcher)
                    .setContentIntent(pIntent)
                    .setAutoCancel(true).build();
    
            NotificationManager notificationManager =
                    (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    
            notificationManager.notify(0, Noti);
        }
    

    然后在你的类的 onCreate/constructor 中这样做:

    if (savedInstanceState == null) {
            Bundle extras = getIntent().getExtras();
            if(extras == null) 
            {
                //Cry about not being clicked on
            } 
            else if (extras.getBoolean("NotiClick"))
            {
                //Do your stuff here mate :)
            }
    
        }
    

    【讨论】:

      【解决方案3】:
          Intent intent = new Intent(this, Notificationintent.class);
          PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent, 0);
      
      
      
          Notification noti = new Notification.Builder(this)
          .setContentTitle("APP NOTIFICATION")
          .setContentText(messageValue)
          .setSmallIcon(R.drawable.ic_launcher)
           .setStyle(new Notification.BigTextStyle()
           .bigText(messageValue))
          .setContentIntent(pIntent).build();
      
      NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
      // hide the notification after its selected
      noti.flags |= Notification.FLAG_AUTO_CANCEL;
      
      notificationManager.notify(0, noti);
      

      【讨论】:

      • 这里 Notificationintent 是另一个活动,messagevalue 是一个字符串。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-03
      • 1970-01-01
      • 2017-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多