upd2. この問題は、一種のブラック マジック ルーチン (アンインストール、Eclipse プロジェクトのクリーン、Android デバイスの再起動、再構築、インストール、実行) の後で発生しました。それは解決されていません、それはなくなりました。何が起こったのか誰か説明してくれませんか?
更新。Hello Widget チュートリアル (参照コメント) をモデルにした Android ウィジェット プロジェクトでは、Java コードがまったく実行されていないようです。ウィジェットを便利にするコードを実行する方法はありますか? 何かをするためのウィジェットがたくさんあるので、それは可能だと思います。彼らはどのようにそれを作るのですか?
Hello Widget チュートリアルの後、単純な Android ウィジェットをモデル化しました: http://nm-blog.sanid.com/2009/07/android-helloidget-tutorial/
実行すると、まったく機能していないことがわかります-テキストビューは変更されていません。
ここにいくつかのコードがあります:
マニフェスト:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.pell.hellowidget"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<receiver android:name="HelloWidgetProvider" android:label="@string/app_name">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/hello_widget_provider" />
</receiver>
</application>
</manifest>
res/xml/hello_widget_provider.xml
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="280dp"
android:minHeight="180dp"
android:updatePeriodMillis="10000"
android:initialLayout="@layout/hello_widget_layout"
android:resizeMode="vertical" />
res/layout/hello_widget_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical|center_horizontal"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Large Text"
android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>
src/com/pell/hellowidget/HelloWidgetProvider.java:
package com.pell.hellowidget;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.Timer;
import java.util.TimerTask;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.widget.RemoteViews;
public class HelloWidgetProvider extends AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
Timer timer = new Timer();
timer.scheduleAtFixedRate(new MyTime(context, appWidgetManager), 1,
1000);
super.onUpdate(context, appWidgetManager, appWidgetIds);
}
private Date currentTime;
private class MyTime extends TimerTask {
RemoteViews remoteViews;
AppWidgetManager appWidgetManager;
ComponentName thisWidget;
DateFormat format = SimpleDateFormat.getTimeInstance(
SimpleDateFormat.MEDIUM, Locale.getDefault());
public MyTime(Context context, AppWidgetManager appWidgetManager) {
this.appWidgetManager = appWidgetManager;
remoteViews = new RemoteViews(context.getPackageName(),
R.layout.hello_widget_layout);
thisWidget = new ComponentName(context, HelloWidgetProvider.class);
}
@Override
public void run() {
currentTime = new Date();
remoteViews.setTextViewText(R.id.textView1,
format.format(currentTime));
appWidgetManager.updateAppWidget(thisWidget, remoteViews);
}
}
}
私が理解している限り、com.pell.helloidget.HelloWidgetProviderオブジェクトをインスタンス化する人がいないため、機能していません。エントリ ポイント (int main(int argc, char * argv[])、WinMain など) の Java/Android Widget/etc アナログとは何ですか? 誰が (そしてどのように) AppWidgetProvider オブジェクトをインスタンス化しますか?