Android:向Intent添加数据无法加载Activity [英] Android: Adding data to Intent fails to load Activity

查看:27
本文介绍了Android:向Intent添加数据无法加载Activity的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个小部件,当用户单击小部件主体时,它应该调用主应用程序的 Activity.我的设置适用于单个小部件实例,但对于同一小部件​​的第二个实例,PendingIntent 被重用,因此我作为额外发送的重要信息被第一个实例覆盖.所以我想我应该将小部件 ID 作为 Intent 数据传递,但是一旦我添加 Intent#setData 我会在日志中看到 2 个单独的 Intent 被适当地触发,但是Activity 无法拾取它,所以基本上 Activity 不会出现,也没有任何反应(没有错误或警告以太)以下是清单中 Activity 的设置方式:

I have a widget that supposed to call an Activity of the main app when the user clicks on widget body. My setup works for a single widget instance but for a second instance of the same widget the PendingIntent gets reused and as result the vital information that I'm sending as extra gets overwritten for the 1st instance. So I figured that I should pass widget ID as Intent data however as soon as I add Intent#setData I would see in the log that 2 separate Intents are appropriately fired but the Activity fails to pick it up so basically Activity will not come up and nothing happens (no error or warning ether) Here's how the activity is setup in the Manifest:

    <activity android:name=".SearchResultsView" 
         android:label="@string/search_results"
        <intent-filter>
            <action android:name="bostone.android.search.RESULTS" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

这里是为处理点击设置的代码

And here's code that is setup for handling the click

Intent di = new Intent("bostone.android.search.RESULTS");
di.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// if line below is commented out - the Activity will start
di.setData(ContentUris.withAppendedId(Uri.EMPTY, widgetId));
di.putExtra("URL", url);
views.setOnClickPendingIntent(R.id.widgetContent, 
    PendingIntent.getActivity(this, 0, di, 0));

主应用程序和小部件被打包为 2 个单独的 APK,每个 APK 在其自己的包和清单中

The main app and the widget are packaged as 2 separate APK each in its own package and Manifest

推荐答案

我认为你的 中需要一个 <data> 标签使您触发的意图与您注册的意图过滤器相匹配.

I think you need a <data> tag in your <intent-filter> in order for the intent you are firing to match the intent-filter you have registered.

https://developer.android.com/guide/topics/manifest/data-element.html

使用 Uri.EMPTY 也可能是个问题.我会创建您自己的 Uri 方案,以便您的 setData() 调用看起来像:

Also using Uri.EMPTY may be a problem. I'd create your own Uri scheme, so that your setData() call looks something like:

di.setData(Uri.withAppendedPath(Uri.parse("droidln://widget/id/"), String.valueOf(appWidgetId)));

你的意图过滤器看起来像:

and your intent-filter would look like:

    <intent-filter>
        <action android:name="bostone.android.search.RESULTS" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="droidln"/>
    </intent-filter>

这篇关于Android:向Intent添加数据无法加载Activity的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆