Android 2.1に対して作成したウィジェットがありますが、これは問題なく市場で販売されています。
ユーザーから購入したとの苦情がありましたが、Android 4.0デバイスには表示されませんでした。
4.0エミュレーターをロードし、Eclipseから実行すると、インストールが成功したことが報告されました。実際、「ウィジェットプレビュー」アプリに表示され、そこで実行できますが、問題ないようですが、表示されません。 「ウィジェット」の下のどこかにあります-ホーム画面にドラッグするために実際に見つけることができません!これはユーザーが見ているものと同じだと思います。
ここで何が起こっているのか分かりますか? 2.1では問題ないのに、インストールが成功した後でも4.0のリストに表示されないのはなぜですか?
これは私のlayout\widget.xmlファイルです、それが助けになるなら:
<RelativeLayout Android:id="@+id/relativeLayout1" Android:layout_width="fill_parent" Android:layout_height="fill_parent" xmlns:Android="http://schemas.Android.com/apk/res/Android">
<TextView Android:layout_width="wrap_content" Android:id="@+id/blankspot" Android:layout_height="5dp" Android:gravity="center" Android:shadowDy="1" Android:shadowDx="1" Android:layout_centerHorizontal="true"></TextView>
<ImageButton Android:layout_below="@+id/blankspot" Android:layout_width="60dp" Android:layout_height="60dp" Android:id="@+id/widgetIconButton" Android:layout_centerHorizontal="true" Android:scaleType="centerCrop" Android:src="@drawable/volumeprofilesplus" Android:background="@null"></ImageButton>
<ImageView Android:layout_width="60dp" Android:layout_height="20dp" Android:id="@+id/override" Android:layout_centerHorizontal="true" Android:layout_centerVertical="true" Android:scaleType="fitXY" Android:background="@null" Android:src="@drawable/overredcaps" Android:visibility="invisible"></ImageView>
<ImageButton Android:layout_below="@+id/widgetIconButton" Android:layout_width="70dp" Android:layout_height="30dp" Android:id="@+id/widgetSettingsButton" Android:layout_centerHorizontal="true" Android:scaleType="fitXY" Android:src="@drawable/settings" Android:background="@null"></ImageButton>
</RelativeLayout>
そして、xml\widget_provider.xml:
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:minWidth="72dip"
Android:minHeight="72dip"
Android:updatePeriodMillis="0"
Android:initialLayout="@layout/main" >
</appwidget-provider>
だからここに私が思いついた解決策があります:
ランチャーに表示されるアクティビティが必要です。したがって、最初に、次のような古いウィジェットレシーバーがあります。
<receiver Android:name=".VolumeProfilesWidget" Android:label="@string/app_name">
<intent-filter>
<action Android:name="Android.appwidget.action.APPWIDGET_UPDATE" />
<!-- Broadcast Receiver that will also process our self created action -->
<action Android:name="net.thepurge.volumeprofiles.plus.VolumeProfilesWidget.ACTION_WIDGET_RECEIVER"/>
</intent-filter>
<meta-data Android:name="Android.appwidget.provider" Android:resource="@xml/volumeprofiles_widget_provider" />
</receiver>
次に、MAINとLAUNCHERを設定して、いくつかのアクティビティが必要です。
<activity Android:name=".MainActivity"
Android:label="@string/app_name">
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
<action Android:name="net.thepurge.volumeprofiles.plus.VolumeProfilesWidget.ACTION_WIDGET_CONFIGURE"/>
</intent-filter>
</activity>
私が知る限り、ウィジェットが関連するアクティビティのない純粋なウィジェットであると想定されている場合でも、これを実行する必要があります。少なくとも、「ウィジェットを使用する準備ができました。ウィジェットの下で探してホーム画面にドラッグしてください」という画面を起動するダミーアクティビティを1つ作成します。
私の場合、ウィジェットをプッシュするとウィジェットがアクティビティを起動したので、そのアクティビティをLAUNCHER/MAINに作成し、基本的に「これをアプリケーションとして実行できますが、代わりにウィジェット」。
4.0エミュレーターでは、この変更前の初回インストール時にウィジェットが表示されなかったことに注意してください。アクティビティをMAINとLAUNCHERに設定するだけで、ウィジェットを表示するのに十分であるように見えました。
数日後、私は解決策を見つけました
アプリを開いたときに起動されるアクティビティに移動し、メインアクティビティにこの行のみを追加します
sendBroadcast(new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME));
例として
public class Default class extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
sendBroadcast(new Intent(Intent.ACTION_MAIN)
.addCategory(Intent.CATEGORY_HOME));
setContentView(R.layout.main);
}
それだけです、これはメインアプリが現在実行されていることをシステムに与え、ウィジェットをランチャーに送ります:)マニフェストの何も変更しないという単純な行は、ウィジェットを表示するアプリを開発した方法を維持するだけです通常、以前のバージョンでは<4.x
同じ問題が発生しました。 appwidgetprovider.xml(located in res/xml)
の<PreferenceScreen>
タグを削除して修正しました。
ウィジェットを表示するには、関連するアプリを少なくとも1回は手動で起動する必要があります。それ以前は実行不可能な状態で、放送などを受信しません。
私の解決策(4.1.2のウィジェット)は、ウィジェットが内部デバイスストレージにインストールされていることを確認することでした。
によると: Androidドキュメント:install-location 、外部ストレージにウィジェットをインストールしないでください。
ウィジェットをアンインストールして再度インストールする必要がありましたが、その後、変更が表示されました。
便利なリンク:
http://www.technipages.com/fix-Android-app-widgets-not-appearing-on-widget-list