【问题标题】:Intent extra data seems to disappear when calling getExtra调用 getExtra 时,意图的额外数据似乎消失了
【发布时间】:2011-07-24 20:48:51
【问题描述】:

由于某种原因,我添加到意图中的捆绑额外数据在收到意图时不会持续存在。我已经调试了很长一段时间,但我没有发现我的代码有任何问题。也许有人可以帮忙。

意图创建:

// Intent created within an IntentService for an AppWidgetProvider
final Intent textViewIntent = new Intent(this, LocWidgetProvider.class);
textViewIntent.setAction(ACTION_CHANGE_LOCALE);
textViewIntent.putExtra("SomeExtra", "SomeValue");
Log.d("ExtraTest", String.format("Extra data: %s", 
       textViewIntent.getStringExtra("SomeExtra")));
final PendingIntent textViewPendingIntent = PendingIntent.getBroadcast(this, 0,
                            textViewIntent, PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setOnClickPendingIntent(R.id.SomeButton, textViewPendingIntent);

当按下“SomeButton”后接收到inent时:

protected void onHandleIntent(Intent intent) {   
if(intent.getAction().equals(ACTION_CHANGE_LOCALE))
{
    if(!intent.hasExtra("SomeExtra"))
    {
        Log.d("ExtraTest", "Extra data was null :(");
    }
    else {
        String newLocale = (String)intent.getExtras().get("SomeExtra");
        LocaleManager.ChangePhoneLocale(new Locale(newLocale));
    }
}

我一直在打:

“Extra data: SomeValue”(Intent创建时好像有数据)

"Extra data was null :(". (Intent 收到时不再有 ExtraData

创建意图时我做错了吗?

【问题讨论】:

  • 其他人似乎遇到了这个问题,但还没有答案link

标签: android


【解决方案1】:

我也有这个问题,并通过获取父 Intent 解决了它。
在我的情况下,我设置了两个 vales,一个被转发到新的 Activity,一个没有。

通话活动;

                                intent.putExtra(Constants.EXTRA_ID, note.getFormatedDate());
                            intent.putExtra(Constants.EXTRA_NAME, name);

接收活动

        String id = intent.getStringExtra(Constants.EXTRA_ID);


    if( id == null ) {
        Activity p = getParent();
        if( p != null ) {
            Intent i2 = p.getIntent();
            if( i2 != null ) {
                id = i2.getStringExtra(Constants.EXTRA_ID);
            }
        }
    } 

【讨论】:

    【解决方案2】:

    尝试getParent().getIntent().getExtras().getWHATYOUWANT(key);,因为getParent() 获得了调用意图的活动,所以额外发送。

    String newLocale = intent.getExtras().getString("SomeExtra"); 不进行强制转换

    【讨论】:

    • 我在onHandleIntent方法内部已经有了意图,所以我不确定调用getIntent会实现什么?我的问题是 intent.hasExtra("SomeExtra") 评估为假。多余的不存在。事实上,如果我调试,Intent Bundle 映射为空(意味着根本没有额外内容)
    • 嗯...尝试以另一种方式做同样的事情。尝试测试里面是否有any Bundle。 if(intent.getExtras()==null) ...我知道我在绕圈跑,但你必须尝试。
    • 我终于解决了!我需要执行以下操作: final Intent originalIntent = (Intent)intent.getExtras().get( Intent.EXTRA_INTENT );最终字符串额外 = originalIntent.getStringExtra("SomeExtra");知道为什么要将意图捆绑在另一个意图中吗?
    • 可能你开始PendingIntent
    • intent在另一个intent中的原因是:developer.android.com/reference/android/app/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多