【问题标题】:I can not properly transfer intent through notification我无法通过通知正确转移意图
【发布时间】:2014-12-12 09:46:51
【问题描述】:

我有 3 种类型的通知。根据我打开不同屏幕的类型。为此,我将参数传递给意图。然后他就意犹未尽了。问题是所有通知都包含最后发送的意图。这是因为我使用了标志PendingIntent.FLAG_UPDATE_CURRENT 我尝试了其他标志,但它们也不起作用。我需要注意每个都包含它的意图,并将其压入我需要的主要 Activity 传输数据中。

public class GCMIntentService extends GCMBaseIntentService {
    public static int ID_NITIF =1;

    public GCMIntentService() {
        super(SENDER_ID);
    }

    @Override
    protected void onMessage(Context context, Intent intent) {
        String title = intent.getStringExtra("title");
        String message = intent.getStringExtra("content");
        int groupid = Integer.parseInt(intent.getStringExtra("group_id"));
        generateNotification(context,title, message,groupid,intent);
    }
..............
    private void generateNotification(Context context, String title, String message,int groupid,Intent data) {

        NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
        Intent intent = new Intent(context,MyActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
                | Intent.FLAG_ACTIVITY_SINGLE_TOP);

        if (groupid==1){
            intent.putExtra("guest",data.getStringExtra("guest"));
            intent.putExtra("hotel",data.getStringExtra("hotel"));
            intent.putExtra("room",data.getStringExtra("room"));
        }
        if (groupid==5){
            intent.putExtra("hotel",data.getStringExtra("hotel"));
        }
        if (groupid==4){
            intent.putExtra("hotel",data.getStringExtra("hotel"));
            intent.putExtra("guest",data.getStringExtra("guest"));
        }

        intent.putExtra("group_id",groupid);
        Log.d("mylogout","group_id: "+groupid);
        PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

        Notification notification   = new NotificationCompat.Builder(context)
                .setContentIntent(pendingIntent)
                .setSmallIcon(R.drawable.ic_stat_gcm)
                .setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_stat_gcm))
                .setTicker("Новое сообщение")
                .setWhen(System.currentTimeMillis())
                .setAutoCancel(true)
                .setContentTitle(title)
                .setContentText(message)
                .build();
        notificationManager.notify(ID_NITIF++, notification);
    }
}

在我的活动中

public void onNewIntent(Intent intent){
        FragmentManager fragmentManager = getSupportFragmentManager();
        Bundle arguments;
        Fragment fragment;
        String guest;
        Bundle extras = intent.getExtras();
        if(extras != null){
            if(extras.containsKey("group_id"))
            {
                int msg = extras.getInt("group_id");
                String hotel = extras.getString("hotel");
                switch (msg){
                    case 5:
                        fragment = new PagerLogbookContainer();
                        arguments = new Bundle();
                        arguments.putString(ARGUMENT_PAGE_HOTEL, hotel);
                        fragment.setArguments(arguments);
                        fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
                        fragmentManager.beginTransaction().replace(R.id.container, fragment).commit();
                        setTitle(hotel);
                        break;
                    case 1:
                        guest = extras.getString("guest");
                        String room = extras.getString("room");
                        fragment = new Guest();
                        arguments = new Bundle();
                        arguments.putString("guestid", guest);
                        arguments.putString("hotel", hotel);
                        arguments.putString("room",room);
                        fragment.setArguments(arguments);
                        fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
                        fragmentManager.beginTransaction().replace(R.id.container, fragment, "guest").commit();
                        break;
                    case 4:
                        guest = extras.getString("guest");
                        fragment = new Survey();
                        arguments = new Bundle();
                        arguments.putString("guestid", guest);
                        arguments.putString("hotel", hotel);
                        fragment.setArguments(arguments);
                        fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
                        fragmentManager.beginTransaction().replace(R.id.container, fragment).commit();
                        break;
                }
            }

在 onCreate() 中

 onNewIntent(getIntent());

【问题讨论】:

    标签: android android-intent android-notifications


    【解决方案1】:

    试试这个代码可能对你有帮助

     public void onNewIntent(Intent intent){
        FragmentManager fragmentManager = getSupportFragmentManager();
        Bundle arguments;
        Fragment fragment;
        String guest;
        Bundle extras = intent.getExtras();
        if(extras != null){
            if(extras.containsKey("group_id"))
            {
                int msg = extras.getInt("group_id");
                String hotel = extras.getString("hotel");
                displayView(int msg)
            }
        public void displayView(int msg) {
    
        switch (msg) {
        case 5:
             fragment = new PagerLogbookContainer();
              arguments = new Bundle();
              arguments.putString(ARGUMENT_PAGE_HOTEL, hotel);
            break;
        case 1:
              guest = extras.getString("guest");
              String room = extras.getString("room");
              fragment = new Guest();
                arguments = new Bundle();
                 arguments.putString("guestid", guest);
                arguments.putString("hotel", hotel);
                arguments.putString("room",room);
            break;
        case 4:
             guest = extras.getString("guest");
             fragment = new Survey();
             arguments = new Bundle();
             arguments.putString("guestid", guest);
             arguments.putString("hotel", hotel);
            break;
    
        default:
            break;
        }
    
        if (fragment != null) {
    
                fragment.setArguments(arguments);
    
            FragmentManager fragmentManager = getSupportFragmentManager();
            fragmentManager.beginTransaction()
                    .replace(R.id.container, fragment).commit();
    
        }
    }
    

    【讨论】:

    • 谢谢,但不是问题。一切正常。问题是每个新通知都会覆盖过去。如果我发送的第一个通知表明该人口和第二个客人已离开,当您单击其中任何一个时,将打开“客人离开”片段。这就是为什么第二个通知阻止了前者的原因。 Activity 本身从通知中获取了错误的数据
    【解决方案2】:

    我找到了解决方案。一个星期,没有人能帮上忙。到存储在每个通知中的数据,您要在意图中添加操作intent.setAction("some");

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多