当前位置: 首页 > 知识库问答 >
问题:

IntentService创建的通知总是使用错误的意图

鞠边浩
2023-03-14

当用户按下发送“按钮1”(向下滚动查看应用程序的构造)时,将从刷新服务创建一个新的通知。如果用户按下此通知,MainActivity实例将启动,并在intent上接收具有值按钮1字符串

将显示该值。

当用户立即按下发送“按钮2”时,将从刷新服务创建一个新的通知。如果用户按下此通知,MainActivity实例将启动,并接收一个字符串,该字符串还带有按钮1的值,位于intent上。

获得第二个按钮值的唯一解决办法是重新启动电话并先按下第二个按钮。即使强行接近也不起作用。

我知道我也可以用另一种方式改变UI。但是我需要在一个应用程序中使用这种方法,我需要用另一个intent重新启动“mainactivity”,所以方法应该是一样的。

>

  • 称为mainactivity活动

    public class MainActivity extends Activity implements View.OnClickListener {
        public static final String RECEIVED = "received";
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            ((TextView)findViewById(R.id.textView_received)).setText(getIntent().getStringExtra(RECEIVED));
    
            findViewById(R.id.button_1).setOnClickListener(this);
            findViewById(R.id.button_2).setOnClickListener(this);
        }
    
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(this, RefreshService.class);
    
            if(v.getId() == R.id.button_1){
                intent.putExtra(RECEIVED, "Button 1");
                Toast.makeText(this,"Sent \"Button 1\"",Toast.LENGTH_LONG).show();
            }
            else if(v.getId() == R.id.button_2){
                intent.putExtra(RECEIVED, "Button 2");
                Toast.makeText(this,"Sent \"Button 2\"",Toast.LENGTH_LONG).show();
            }
    
            startService(intent);
        }
    }
    
    public class RefreshService extends IntentService {
        public RefreshService() {
            super("RefreshService");
        }
    
        @Override
        protected void onHandleIntent(Intent intent) {
            String received = intent.getStringExtra(MainActivity.RECEIVED);
    
            Intent notificationIntent = new Intent(this, MainActivity.class);
            notificationIntent.putExtra(MainActivity.RECEIVED, received);
            notificationIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    
            PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
    
            NotificationCompat.Builder builder = new NotificationCompat.Builder(this).setContentTitle("IntentServiceRefresh").setContentText(received).setSmallIcon(R.drawable.ic_notification_small).setContentIntent(pendingIntent);
            Notification notification = builder.build();
    
            // Hide the notification after it's selected
            notification.flags |= Notification.FLAG_AUTO_CANCEL;
    
            NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
            notificationManager.notify(0, notification);
        }
    }
    

  • 共有1个答案

    夏法
    2023-03-14

    我的怀疑是,由于意图中唯一改变的是附加项,所以PendingIntent.getActivity(...)工厂方法只是将旧意图重新用作优化。

    在RefreshService中,尝试:

    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT);
    

    参见:

     类似资料:
    • 我对Android系统非常陌生,我一直在用头撞墙,我认为这可能是一个微不足道的问题——我已经看过教程和其他StackOverflow问题,但无济于事。 我试图在IntentService中创建一个Intent,但在下面的行标记错误(在sendNotification方法中)上不断得到NullPointerException。 我尝试过不同的方法: 意向意向=新意向(getApplicationCo

    • 我目前在活动A中。我收到通知,我想在单击通知时重新创建活动A(完成A,然后再次创建)。意向类似乎没有类似于Pending帐篷的标志。标记取消当前。

    • 我试过后台服务这样的代码,但第一次报警后应用程序崩溃了。并给出了这个错误: Android.app.remoteserviceException:StartForeground的错误通知:java.lang.runtimeException:服务通知的无效通道:通知(通道=null pri=0 contentview=null dibrate=null sound=null defaults=0x

    • 问题内容: 在iOS 10 Swift 3中从图像选择器中选择图像时,出现错误- 没有选择和更新图像。我需要帮助或建议,以了解有关此方法的语法或任何内容在iOS10或Swift 3中是否已更改,或者是否有其他方法可以执行。 问题答案: 下面提到的代码确实为我解决了问题-

    • 问题内容: 嗨,我正在尝试创建一组六边形集(六边形是我创建的类)。 但是当我尝试编译时出现此错误 我该如何解决? 问题答案: 您不能使用泛型创建数组。使用或代替。 这是正式的解释。

    • 我正在尝试按以下方式启动前台服务: PS:我试了一个非模拟器的Android9.0设备,没有得到这个错误。