我想从我的活动中打开启动器的小部件选择器(例如,当我们长按主屏幕时得到的那个)。我想要实现的是,我想将用户带到我的小部件,以便他有更多机会考虑添加它。
以编程方式将小部件添加到主屏幕将是最好的情况。但是,因为那是不可能的,我想尽可能接近让用户添加小部件。
我尝试了以下操作,但只打开一个包含所有小部件的对话框(而不是启动器),并且通过选择一个没有任何反应。
Intent pickIntent = new Intent(AppWidgetManager.ACTION_APPWIDGET_PICK);
pickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, 0);
startActivityForResult(pickIntent, 1234);
Run Code Online (Sandbox Code Playgroud)
如何使这项工作?非常感谢有关这种情况的任何建议。
我在Android中创建了一个应用程序小部件,并希望为其添加一些基于手势的功能.例如:当用户滑动时,显示新的数据集.AppWidgets不支持AFAIK手势,但我见过具有类似功能的小部件(例如HTC小部件相册和天气小部件).
请帮助我,让我知道我是否遗漏了什么.
欢迎链接到教程,文档或示例代码.
谢谢.
我有一个AppWidget有2个待定意图.他们大部分时间都在工作,但过了一段时间他们就停止了回应.我唯一能够确定的是,它们在Launcher重启后瘫痪,即我使用Launcher Pro,有时会调整设置并且必须重新启动它.之后他们根本不工作.
这里是我onRecieve()和onUpdate()方法:
public void onReceive(Context context, Intent intent)
{
super.onReceive(context, intent);
String action = intent.getAction();
if(action.equals("android.tristan.widget.digiclock.CLICK"))
{
PackageManager packageManager = context.getPackageManager();
Intent alarmClockIntent = new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER);
String clockImpls[][] = {
{"HTC Alarm Clock", "com.htc.android.worldclock", "com.htc.android.worldclock.AlarmClock" },
{"Standar Alarm Clock", "com.android.deskclock", "com.android.deskclock.AlarmClock"},
{"Froyo Nexus Alarm Clock", "com.google.android.deskclock", "com.android.deskclock.DeskClock"},
{"Moto Blur Alarm Clock", "com.motorola.blur.alarmclock", "com.motorola.blur.alarmclock.AlarmClock"}
};
boolean foundClockImpl = false;
for(int i=0; i<clockImpls.length; i++) {
String vendor = clockImpls[i][0];
String packageName = clockImpls[i][1];
String className = clockImpls[i][2]; …Run Code Online (Sandbox Code Playgroud) android onclick android-intent android-pendingintent android-appwidget
将窗口小部件的配置活动添加到主屏幕后,如何重新打开它?
Google搜索中的以下代码不起作用,因为多余的小部件ID不会传递到活动中:
String ACTION_WIDGET_CONFIGURE = "ConfigureWidget";
Intent configIntent = new Intent(context, Configuration.class);
configIntent.setAction(ACTION_WIDGET_CONFIGURE);
configIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
PendingIntent configPendingIntent = PendingIntent.getActivity(context, 0, configIntent, 0);
views.setOnClickPendingIntent(R.id.editButton, configPendingIntent);
Run Code Online (Sandbox Code Playgroud) 我正在玩构建一个新的小部件并且正在查看Android应用程序小部件文档,特别是关于支持哪些小部件类的部分.我注意到ViewFlipper受支持,但我很难找到如何在主屏幕小部件中使用它的任何示例.特别是,我想知道是否可以手动触发交换视图.在一个活动中,这看起来相对简单,一个例子是挂钩按钮的onclick监听器来调用鳍状肢的showNext().
该RemoteViews对象有showNext和showPrevious方法,但我不知道我理解如何挂钩起来,从用户与小部件交互触发的事件.任何人都可以提供何时可以调用这些方法的示例?
看起来小部件中的按钮只能连接到意图而不是代码来练习鳍状肢.如果这个限制为真,那么在app小部件中唯一使用视图翻转器来自动翻转视图吗?
我有一个非常简单的appwidget(两个文本视图和一个按钮).我在触摸板,Droid 1和Droid Razr上进行了测试.它适用于除Razr之外的所有事物.当我将小部件添加到主屏幕时,它不会显示; 它只是看不见的.如果我按住它会选择一个小部件的位置,如果我移动它,我会看到其他小部件移开,但它完全不可见.
我在onReceiveand和onEnabled方法中放了一些Toast,并Toast显示了所有正确的信息(即意图动作和附加内容).
有人有这方面的经验吗?
编辑:请记住,这仅用于调试,不遵循最佳实践
public class GoogleTalkWidget extends AppWidgetProvider {
Button sendMessage;
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Received Intent Action = " +
intent.getAction(), Toast.LENGTH_SHORT).show();
if(intent.getAction().equals(Utils.RECEIVED_MESSAGE_WIDGET)){
RemoteViews views = new RemoteViews(context.getPackageName(),
R.layout.main_widget);
views.setTextViewText(R.id.widget_message,
(CharSequence)intent.getStringExtra("MESSAGE"));
views.setTextViewText(R.id.widget_sender,
(CharSequence)intent.getStringExtra("SENDER"));
Toast.makeText(context, "Received " +
intent.getStringExtra("MESSAGE") + " FROM " +
intent.getStringExtra("SENDER"), Toast.LENGTH_SHORT).show();
ComponentName cn = new ComponentName(context,
GoogleTalkWidget.class);
AppWidgetManager.getInstance(context).updateAppWidget(cn, views);
}
super.onReceive(context, intent);
}
@Override
public void onEnabled(final Context context){ …Run Code Online (Sandbox Code Playgroud) 我希望自动化测试主屏幕小部件.我看过android测试页面和InstrumentationTestRunner类.我也看过CTS源代码; 但我找不到任何有用的东西.
我能找到的最接近的是这个Robolectric ShadowAppWidgetManager,但我不确定如何使用它.
你能否分享一下你如何测试app小部件?我可以使用任何框架或库吗?
非常感谢你的帮助!
onUpdate AppWidget是否在启动时调用?
我在onUpdate中设置了一个警报,我想知道onUpdate是否会在启动时被调用,或者我是否应该使用BOOT_COMPLETED意图.
谢谢.
有一个带有Listview的AppWidget我想用RemoteViewsService.RemoteViewsFactory填充.
我有以下错误
E/AndroidRuntime(1203):java.lang.SecurityException:Permission Denial:读取com.crbin1.myapp.data.ProviderLTD uri内容://com.crbin1.myapp.data.ProviderLTD/TB_WIDGET3P来自pid = 413,uid = 10013要求提供者被导出,或者grantUriPermission()
如果我在清单中导出ProviderLTD(我的内容提供商),它可以工作,但我想避免导出它.
另一个解决方案是grantUriPermission().我在清单中将grantUriPermissions设置为true,但现在我不明白我的代码中我必须授予权限.
public class Widget3pService extends RemoteViewsService {
@Override
public RemoteViewsFactory onGetViewFactory(Intent intent) {
return new StackRemoteViewsFactory(this.getApplicationContext(), intent);
}
}
class StackRemoteViewsFactory implements RemoteViewsService.RemoteViewsFactory {
private List<ObjW3Task> mWidgetItems = new ArrayList<ObjW3Task>();
private Context mContext;
private int mAppWidgetId;
public StackRemoteViewsFactory(Context context, Intent intent) {
mContext = context;
mAppWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
}
public RemoteViews getViewAt(int position) {
// use mWidgetItems to populate ListView
// fillInIntent for listeners
return myRemoteViews;
}
public void …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用ListView实现Android App Widget.我开始关注Google文档但是我遇到了正在显示的加载视图列表,而不是正常的列表项.有没有人有小部件列表视图的经验?
代码与Google文档中的代码相同.我使用ListView而不是StackView作为数据源我使用数据库(这不是问题,数据是正确获得的 - 我通过返回正常的列表项视图而不是默认的加载视图尝试了这一点)
搜索互联网没有帮助我...我也试过这个教程,但它也没有用.我希望有人可以帮助我,提前谢谢!
WidgetProvider.java
public class WidgetProvider extends AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
for (int i = 0; i < appWidgetIds.length; i++) {
Intent intent = new Intent(context, EventWidgetService.class);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.widget);
rv.setRemoteAdapter(android.R.id.list, intent);
rv.setEmptyView(android.R.id.list, R.id.tvEmptyList);
appWidgetManager.updateAppWidget(appWidgetIds[i], rv);
}
super.onUpdate(context, appWidgetManager, appWidgetIds);
}
}
Run Code Online (Sandbox Code Playgroud)
WidgetService.java
public class EventWidgetService extends RemoteViewsService {
@Override …Run Code Online (Sandbox Code Playgroud)