【问题标题】:Intent.getExtras() always returns nullIntent.getExtras() 总是返回 null
【发布时间】:2013-01-15 13:15:03
【问题描述】:

我正在尝试通过通知和事件onCreate 运行活动,我想“重定向”。为此,请考虑Intent 类中的信息。一个重要的特性是生成通知的类是通过服务执行的。我从android.app.Application 类提供的getApplicationContext 方法中检索上下文。每当我调用方法getExtras() 时,都会返回null。我做错了什么?

public class OXAppUpdateHandler {

    private void addNotification(Context context, int iconID,
           CharSequence tickerText, CharSequence title, CharSequence content) {

        CharSequence notificationTicket = tickerText;
        CharSequence notificationTitle = title;
        CharSequence notificationContent = content;

        long when = System.currentTimeMillis();

        Intent intent = new Intent(context, MainActivity_.class);
        intent.setFlags(
            Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
        intent.putExtra(OPEN_UPDATE_ACTIVITY_KEY, 1);

        PendingIntent pendingIntent = 
            PendingIntent.getActivity(context, 0, intent, 0);

        NotificationManager notificationManager = 
            (NotificationManager) context.getSystemService(
                Context.NOTIFICATION_SERVICE);
        Notification notification = 
            new Notification(iconID, notificationTicket, when);
        notification.setLatestEventInfo(context, notificationTitle, 
                                        notificationContent, pendingIntent);
        notificationManager.notify(NOTIFICATION_ID, notification);
    }

    public static boolean isUpdateStart(Intent intent) {
        Bundle bundle = intent.getExtras();
        boolean result = bundle != null && 
                         bundle.containsKey(OPEN_UPDATE_ACTIVITY_KEY);
        if (result) {
            bundle.remove(OPEN_UPDATE_ACTIVITY_KEY);
        }
        return result;
        }
    }

    @EActivity(R.layout.activity_main)
    public class MainActivity extends Activity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            if (OXAppUpdateHandler.isUpdateStart(getIntent())) {
                startActivity(new Intent(this, UpdateActivity_.class));
            }
        }
    }

【问题讨论】:

  • 你能发布一些代码吗?
  • 尝试获取基本上下文,即进入通知广播或其他地方。
  • @ChangdeoJadhav 方法 OXAppUpdateHandler。 addNotification(...) 通过代码 intent.putExtra(OPEN_UPDATE_ACTIVITY_KEY, 1);

标签: android android-intent


【解决方案1】:

我要探出窗外,猜猜你的问题出在这里:

PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);

您将intent 传递给getActivity() 并期望您会得到一个与您的Intent 匹配的PendingIntent 并包括您的附加功能。不幸的是,如果系统中已经有一个 PendingIntent 与您的 Intent 匹配(没有考虑您的 Intent 附加功能),那么 getActivity() 将返回您 PendingIntent而是。

要查看是否是问题所在,请尝试以下操作:

PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent,
                    PendingIntent.FLAG_UPDATE_CURRENT);

这表示如果系统中某处已经存在与您的Intent 匹配的PendingIntent,它应该用您的intent 参数中的那些替换额外的。

【讨论】:

  • 这对我有用!我还包括下面的代码,因为活动并不总是重新创建:@EActivity(R.layout.activity_main) public class MainActivity extends OXBaseActivity { ... @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); if (OXAppUpdateHandler.isUpdateStart(intent)) { startActivity(new Intent(this, UpdateActivity_.class)); } } }
  • 活动并不总是重新创建,因为您已经设置了Intent.FLAG_ACTIVITY_CLEAR_TOPIntent.FLAG_ACTIVITY_SINGLE_TOP。如果您希望始终重新创建活动,请从传递给 getActivity()Intent 中删除 Intent.FLAG_ACTIVITY_SINGLE_TOP
  • 成功了。我传递的是 0 而不是 PendingIntent.FLAG_UPDATE_CURRENT。非常感谢。
  • 你为我节省了很多时间,@DavidWasser 谢谢!
  • @David Wasser 你救了我。非常感谢。
【解决方案2】:

(1) 检查 here 以确保您正确使用 put/get extras,因为我没有看到您在其中添加数据的代码。

(2) 看起来您没有调用 get intent 和 get extra,因此实际上没有从捆绑包中获取任何内容(假设存在信息)。如果您正在检查布尔值,您应该按如下方式获取放置在包中的数据:

Bundle bundle = getIntent().getExtras();

if (bundle.getBooleanExtra("WHATEVER"){
   //whatever you want to do in here
} 

【讨论】:

  • 我在... intent.putExtra (OPEN_UPDATE_ACTIVITY_KEY, 1);添加信息然后恢复Bundle bundle = intent.getExtras (); boolean result = bundle! = null && bundle.containsKey (OPEN_UPDATE_ACTIVITY_KEY);
  • 但是您没有正确获得额外的内容。 . .你试过我建议的方法了吗?
  • 就我而言,当我调用 getIntent().GetExtras() 时返回 null
猜你喜欢
  • 1970-01-01
  • 2014-03-04
  • 2016-11-02
  • 2014-05-06
  • 2012-06-05
  • 2014-05-30
  • 2014-02-23
  • 2017-10-12
  • 2013-08-16
相关资源
最近更新 更多