gpt4 book ai didi

android - 从小部件启动 Activity

转载 作者:IT老高 更新时间:2023-10-28 21:35:03 30 4
gpt4 key购买 nike

我正在尝试做一些本来应该很容易的事情,但这让我发疯了。我正在尝试在按下主屏幕小部件时启动 Activity ,例如小部件的配置 Activity 。我想我已经逐字阅读了 Android 开发者网站上的教程,甚至还有一些非官方的教程,但我肯定遗漏了一些重要的东西,因为它不起作用。

代码如下:

public class VolumeChangerWidget extends AppWidgetProvider {

public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds){
final int N = appWidgetIds.length;

for (int i=0; i < N; i++) {
int appWidgetId = appWidgetIds[i];

Log.d("Steve", "Running for appWidgetId " + appWidgetId);
Toast.makeText(context, "Hello from onUpdate", Toast.LENGTH_SHORT);
Log.d("Steve", "After the toast line");

Intent intent = new Intent(context, WidgetTest.class);

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

RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);
views.setOnClickPendingIntent(R.id.button, pendingIntent);

appWidgetManager.updateAppWidget(appWidgetId, views);
}
}

}

将小部件添加到主屏幕时,Logcat 会显示两个调试行,但不是 Toast。 (有什么想法为什么不呢?)然而,更令人烦恼的是,当我点击带有 PendingIntent 关联的按钮时,什么也没有发生。我知道“WidgetTest” Activity 可以运行,因为如果我在主 Activity 中设置一个 Intent,它可以正常启动。

如果重要的话,这里是 Android Manifest 文件:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.steve"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".Volume_Change_Program"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

<activity android:name=".WidgetTest"
android:label="@string/hello">
<intent_filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent_filter>
</activity>

<receiver android:name=".VolumeChangerWidget" >
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/volume_changer_info" />
</receiver>

</application>
<uses-sdk android:minSdkVersion="3" />

有没有办法测试故障在哪里? IE。是按钮未正确链接到 PendingIntent,还是 PendingIntent 或 Intent 未找到 WidgetTest.class 等故障?

非常感谢您的帮助!

史蒂夫

最佳答案

让这种方式起死回生,但我遇到了类似的问题,我想我终于解决了它......和你一样,我有一个附加到 RemoteView 的 PendingIntent。有时它会起作用,有时它会失败。这让我发疯了。

我从 PendingIntent.getActivty() 的工具提示中发现:

Note that the activity will be started outside of the context of an existing activity, so you must use the Intent.FLAG_ACTIVITY_NEW_TASK launch flag in the Intent.

所以,我补充说:

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

到目前为止,我没有看到任何示例代码可以做到这一点,但它解决了我的问题;现在可以可靠地启动设置 Activity 。

运行良好的完整代码...

Intent intent = new Intent(context, Settings.class);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appId); // Identifies the particular widget...
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// Make the pending intent unique...
intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
PendingIntent pendIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.wwwidget);
views.setOnClickPendingIntent(R.id.widget, pendIntent);
appWidgetManager.updateAppWidget(appId,views);

关于android - 从小部件启动 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1937236/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com