调用getExtra时,意图额外数据似乎会消失

3

由于某些原因,我添加到我的意图中的附加数据在接收到意图时未保留。我已经进行了相当长时间的调试,但是我并没有发现代码方面的问题。也许有人可以提供帮助。

意图创建:

// 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”后接收意图时:
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));
    }
}

我一直遇到这个问题:

“额外的数据:SomeValue”(当创建Intent时,Intent似乎有数据)

“额外的数据为空 :(”。(当接收到Intent时,Intent不再具有ExtraData)

我在创建Intent时做错了什么吗?


似乎有其他人遇到了这个问题,但还没有答案 [链接](https://dev59.com/hHE85IYBdhLWcg3wNw14) - PhilYoussef
2个回答

2
我也遇到了这个问题,通过获取父Intent解决了它。
在我的情况下,我设置了两个值,其中一个被转发到了新的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);
            }
        }
    } 

0
尝试使用 getParent().getIntent().getExtras().getWHATYOUWANT(key);,因为 getParent() 获取调用意图的活动,所以 extras 也会被传输。
或者使用 String newLocale = intent.getExtras().getString("SomeExtra");,无需转换。

我在onHandleIntent方法内已经拥有了Intent,因此我不确定调用getIntent会带来什么效果?我的问题是intent.hasExtra("SomeExtra")的结果是false。附加项不在那里。事实上,如果我进行调试,Intent Bundle映射为null(意味着根本没有额外项目)。 - PhilYoussef
嗯...试着用另一种方式做。尝试测试是否有任何Bundle存在。if(intent.getExtras()==null)...我知道我在打转,但你必须进行实验。 - Nikola Despotoski
我终于解决了!我需要执行以下操作:final Intent originalIntent = (Intent)intent.getExtras().get( Intent.EXTRA_INTENT ); final String extra = originalIntent.getStringExtra("SomeExtra"); 有任何想法为什么意图会被捆绑在另一个意图中吗? - PhilYoussef
可能你会开始使用 PendingIntent - Nikola Despotoski
意图嵌套在另一个意图中的原因是:https://developer.android.com/reference/android/app/PendingIntent.html#FLAG_UPDATE_CURRENT - Teng-pao Yu
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接