从启动微件的活动与配置活动 [英] Launching an activity from a widget with a configure activity
问题描述
大家好,
我有从我的主屏幕发射活动widget.And前,有人标注这是一个重复的问题一个问题,请知道我环顾四周,试图在其他类似的questions.Especially这一项中提到的解决方案
从启动活动部件
我的问题是很简单的,我想从我的主屏幕小部件发起的活动,它不工作。
注:本活动从窗口小部件启动一次(第一次)后,重新安装应用程序的
My problem is simple enough , I want to launch an activity from my home screen widget , and it is not working. Note : The Activity launches from the widget once(for the first time) after a fresh install of the application.
下面是code小部件提供,配置活动和相关的舱单entry.let我知道如果你需要看到code的任意多位。
Here is the code for the widget provide, the configure activity and the relevant manifest entry.let me know if you need to see any more bits of code.
配置活动:
public class SingleNoteConfigure extends ListActivity {
private NotesDbAdapter mDbHelper;
int mAppWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID;
public static String ACTION_WIDGET_LIST = "ActionReceiverList";
public static String ACTION_WIDGET_NEW = "ActionReceiverNew";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//set the result to canceled to allow the user
//to change their mind mid widget configure
setResult(RESULT_CANCELED);
Log.d("MYTAG", "in the onCreate of of the widget configure");
//set the layout file for the widget configure
setContentView(R.layout.notes_list_config);
//using the action bar title for user instruction
setTitle("Select note to display on the widget");
// Find the widget id from the intent.
Intent intent = getIntent();
Bundle extras = intent.getExtras();
if (extras != null) {
mAppWidgetId = extras.getInt(
AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
}
Log.d("MYTAG", "in the onCreate");
//stuff to get the database to open
mDbHelper = new NotesDbAdapter(this);
mDbHelper.open();
//call the method that fills the list view
fillData();
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
Cursor note = mDbHelper.fetchNote(id);
startManagingCursor(note);
String title = note.getString(note.getColumnIndexOrThrow(NotesDbAdapter.KEY_TITLE));
String text = note.getString(note.getColumnIndexOrThrow(NotesDbAdapter.KEY_BODY));
RemoteViews views = new RemoteViews(this.getPackageName(), R.layout.singlenote_widget);
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this);
appWidgetManager.updateAppWidget(mAppWidgetId, views);
Log.d("MYTAG", "in the onListItemClick....");
loadData(title, text, id);//here id is the row id of the selection;it is returned by the onListItemSelect
Intent resultValue = new Intent();
resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
setResult(RESULT_OK,resultValue);
finish();
}
void loadData(String title, String text, Long Id) {
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this);
Log.d("MYTAG", "in the load data....");
SingleNote.updateWidget(this, appWidgetManager, mAppWidgetId, title, text);
NotesDbAdapter.updateWidgetId(mAppWidgetId,Id);
}
private void fillData() {
Cursor notesCursor = mDbHelper.fetchAllNotes();
startManagingCursor(notesCursor);
Log.d("MYTAG", "in the fill data of the widget configure");
// Create an array to specify the fields we want to display in the list (TITLE and DATE)
String[] from = new String[]{NotesDbAdapter.KEY_TITLE,NotesDbAdapter.KEY_DATE};
// and an array of the fields we want to bind those fields to (title and date)
int[] to = new int[]{R.id.title,R.id.date};
// Now create a simple cursor adapter and set it to display
SimpleCursorAdapter notes = new SimpleCursorAdapter(this, R.layout.notes_row1, notesCursor, from, to);
setListAdapter(notes);
}
}
小部件提供商:
public class SingleNote extends AppWidgetProvider {
public static String UPDATE_ACTION = "ActionUpdateSinglenoteWidget";
private static NotesDbAdapter mDbHelper;
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
final int N = appWidgetIds.length;
// Perform this loop procedure for each App Widget that belongs to this provider
for (int i=0; i<N; i++) {
int appWidgetId = appWidgetIds[i];
Log.d("MYTAG", "in the onUpdate");
Intent intent = new Intent(context, Notepadv3.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.singlenote_widget);
views.setOnClickPendingIntent(R.id.single_note_text, pendingIntent);
// Push update for this widget to the home screen
ComponentName thisWidget = new ComponentName(context, SingleNote.class);
AppWidgetManager manager = AppWidgetManager.getInstance(context);
manager.updateAppWidget(thisWidget, views);
}
}
@Override
public void onReceive(Context context, Intent intent) {
try
{
Log.d("MYTAG", "in the onReceive....");
String action = intent.getAction();
Log.d("MYTAG", "in the onReceive....line 2");
Bundle extras = intent.getExtras();
Log.d("MYTAG", "in the onReceive....after bundle");
String title = extras.getString("title");
Log.d("MYTAG", "in the onReceive....after title");
String text = extras.getString("body");
Log.d("MYTAG", "in the onReceive....after text");
Log.d("MYTAG", "@ the point of int");
int id = extras.getInt("widget_id");
Log.d("MYTAG", action+ title + text + id);
if (action != "rakshak" && action.equals(UPDATE_ACTION)) {
final AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
if (id > 0)
{
updateWidget(context, appWidgetManager, id ,title ,text);
}
else {
return;
}
}
else {
super.onReceive(context, intent);
}
}
catch (Exception e)
{
Log.e("STACKTRACE_TAG", "STACKTRACE");
Log.e("STACKTRACE_TAG", Log.getStackTraceString(e));
}
}
static void updateWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId, String title, String text){
Log.d("MYTAG", "in the updatewidget method in the siglenote widget....");
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.singlenote_widget);
views.setTextViewText(R.id.single_note_title, title);
views.setTextViewText(R.id.single_note_text, text);
appWidgetManager.updateAppWidget(appWidgetId, views);
}
}
从Android清单的东西:
The stuff from the android manifest:
<receiver android:name=".SingleNote"
android:label="Y.A.N (single note widget)"
android:enabled="@bool/is_GB">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/singlenote_widget_provider" />
</receiver>
下面是我的2个主要问题:
Here are my 2 main questions:
- 我怎么活动启动
- ,我如何得到被录音widget的小部件ID?
感谢您抽出时间来阅读这和任何帮助,你可以给。
Thanks for taking the time to read this and for any help that you can give.
推荐答案
我不明白你的活动清单中列出,但你没有粘贴整个文件。确保活动存在那里。
I don't see your activity listed in the manifest, but you didn't paste the whole file. Make sure the activity exists there.
下面是我在我的许多小部件用于启动活动挂起意向工作片段:
Here is a working snippet of the pending intent that I use in many of my widgets to launch activities:
Intent configIntent = new Intent(context, ActivityToBeLaunched.class);
configIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// Make the pending intent unique...
configIntent.setData(Uri.parse(configIntent.toUri(Intent.URI_INTENT_SCHEME)));
PendingIntent pendIntent = PendingIntent.getActivity(context, 0, configIntent, PendingIntent.FLAG_UPDATE_CURRENT);
views.setOnClickPendingIntent(R.id.widgetBack, pendIntent);
}
一件事;我没有看到一个返回意见;
的任何地方。你处理其他地方?
One other thing; I don't see a return views;
anywhere. Are you handling that elsewhere?
这篇关于从启动微件的活动与配置活动的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!