Android:向Intent添加数据无法加载Activity

Bos*_*one 5 android widget android-intent android-activity android-pendingintent

我有一个小部件,当用户点击widget主体时,它应该调用主应用程序的Activity.我的设置适用于单个窗口小部件实例,但是对于同一窗口小部件的第二个实例,PendingIntent会被重用,因此我发送的重要信息将被覆盖为第一个实例.所以我认为我应该将小部件ID作为Intent数据传递但是一旦我添加,Intent#setData我会在日志中看到2个单独的Intents被适当地触发但是Activity无法取出它所以基本上Activity不会出现并且没有任何反应(No错误或警告以太)以下是在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>
Run Code Online (Sandbox Code Playgroud)

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

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));
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*k B 4

我认为您需要一个<data>标签,<intent-filter>以便您要触发的意图与您注册的意图过滤器相匹配。

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

使用 Uri.EMPTY 也可能是一个问题。我将创建您自己的 Uri 方案,以便您的 setData() 调用如下所示:

di.setData(Uri.withAppendedPath(Uri.parse("droidln://widget/id/"), String.valueOf(appWidgetId)));
Run Code Online (Sandbox Code Playgroud)

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

    <intent-filter>
        <action android:name="bostone.android.search.RESULTS" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="droidln"/>
    </intent-filter>
Run Code Online (Sandbox Code Playgroud)