2012-01-09 21 views
27

私はAndroid 2.1に対して作成したウィジェットを持っています。これはうまくいき、市場で販売されています。Android 4.0:ウィジェットが表示されませんか?

私はユーザーが購入したと不満を持ち、Android 4.0デバイスには一度も現れませんでした。

私は4.0エミュレータをロードし、Eclipseから実行したところ、インストールが成功したと報告し、実際には「ウィジェットプレビュー」アプリにリストされていることがわかりました。 「ウィジェット」の下のどこにも表示されません - 実際にホーム画面にドラッグすることはできません!私はこれがユーザーが見ているのと同じことだと仮定します。

ここで何が起こっているのでしょうか? 2.1では正常ですが、正常にインストールした後でも4.0のリストに表示されないのはなぜですか?

それは任意の助けだ場合、これは、私のレイアウトの\ 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> 
+1

あなたの{}ウィジェットの.xml投稿してください – Force

+0

マニフェストまたはプロバイダのxml? Lemmeはコードを正しく貼り付ける方法を理解しています... – JamieB

+0

'layouts \ widget.xml' - それは" typo "ですか、それともあなたのプロバイダXMLは本当にレイアウトフォルダですか?むしろ 'res/xml/widget.xml'にあるべきです。 –

答えて

17

は、だからここに私が思い付いたソリューションです。

<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、私たちはそうのように、あなたがたは古風ウィジェット受信機を持っていますたとえあなたのウィジェットが関連するアクティビティのない純粋なウィジェットであると仮定されているとしても。少なくとも、「あなたのウィジェットはすぐに使用できるようになりました!ウィジェットの下であなたのホーム画面にドラッグしてください!」という画面を起動するダミーアクティビティを1つ作成してください。

私のウィジェットは、プッシュしたときにアクティビティを開始したので、LAUNCHER/MAINにそのアクティビティを作成し、基本的には「アプリケーションとして実行できますが、代わりにウィジェットを使用したい "

4.0エミュレータでは、この変更前に初めてウィジェットを表示することはありませんでした。 MAINとLAUNCHERに設定されたアクティビティを持つだけで、ウィジェットが表示されるようになりました。

+0

これはエミュレータにのみ問題がありますか?これはAndroid 4.0デバイスにも影響しますか? –

+1

どうやらそうです。 [Issue 24208](http://code.google.com/p/android/issues/detail?id=24208)を参照してください。 –

+3

これも端末上にあります。私は4.0のデバイスのために私のアプリを購入し、それを見つけることができなかった顧客からそれについて最初に聞いた。彼は再起動で表示させることができましたが、私は "シャットダウンと再起動"は長期的には非常に良い解決策ではないと思います。 (これはMicrosoftにとっては長年働いていたが) – JamieB

1

ウィジェットが表示されるように少なくとも1回あなたはランチャーに表示されるアクティビティが必要

:など、それは非実行可能な状態にあり、それは放送を受信しませんその前に

+0

ああ、再起動時に見たのは偶然だったかもしれませんが、実際にウィジェットプレビューでそれを開いていたのは何ですか? ウィジェットのプレビュー以外に、「手動で関連するアプリを起動する」ように人々に教えてもらえますか?技術的には、それは単なるウィジェットであり、「アプリケーション」には何も表示されません。 – JamieB

+0

さて、私は実際これについて詳しく調べていません。簡単なテストアクティビティを追加して試してみてください。これが必要な場合は、設定を変更したり、指示を出したりするのに使うことができます。理想的ではない、私は同意する。 –

+1

私はこれが試しだとは思わないので投票しました。私は、関連するアプリを実行せずに使用した純粋なウィジェットを2.3&4.1上に持っています。私は、ウィジェットが後で不安定になるので私がここにいることを認めなければならないが、しばらくの間、それは「純粋なウィジェット」としてうまくいった。 – Tom

3

同じ問題が発生しました。私はappwidgetprovider.xml(located in res/xml)<PreferenceScreen>タグを削除して修正しました。

+2

どこにもPreferenceScreenタグがありませんでした。 – JamieB

9

は日後に私は、新しいソリューション

ので だけこの行を追加するには、アプリを開いたときに開始し、主な活動になりますあなたの活動のいずれかに行くことができます

sendBroadcastを(考え出しましたインテント(Intent.ACTION_MAIN).addCategory(インテント。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); 



} 

、これはメインアプリが今実行しているシステムを提供し、それがランチャーに出ウィジェットを取得します:)だ、それはには何も変更しないシンプルなラインをマニフェスト はちょうどあなたが以前のバージョンでnormaly < 4.xの

+0

これは機能します。ありがとう。 –

+0

私のために働いた – Coderji

0

(4.1.2上のウィジェット)私のソリューションをウィジェットを示しウルのアプリを開発する方法を保つウィジェットが内部デバイスのストレージにインストールされたことを確認してくださいました。

Android Documentation: install-locationによると、外部ストレージにウィジェットをインストールしないでください。

私のウィジェットをアンインストールしてから、もう一度インストールしてください。その後、私は変更を見ました!

お役立ちリンク:

http://www.technipages.com/fix-android-app-widgets-not-appearing-on-widget-list

関連する問題