2012-05-01 12 views
3

私は、起動用時計アプリケーションでウィジェットを作ろうとしています。Androidウィジェットとリスナーをクリック

なぜこのコードは実際のデバイスでは機能しませんか?

私は間違っていますか?

@Override 
public void onReceive(Context context, Intent intent) 
{ 
    String action = intent.getAction(); 
    PendingIntent pendingIntent; 
    if (AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(action)) 
    { 

     RemoteViews views = new RemoteViews(context.getPackageName(), 
       R.layout.clock_appwidget); 

     pendingIntent = PendingIntent.getActivity(context, 0,getAlarmPackage(context), 0); 
     views.setOnClickPendingIntent(R.id.imageView1, pendingIntent); 

     AppWidgetManager.getInstance(context).updateAppWidget(
         intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS), 
         views); 
    } 
} 


public Intent getAlarmPackage(Context context) 
{ 
    PackageManager packageManager = context.getPackageManager(); 
      Intent AlarmClockIntent = new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER); 

    String clockImpls[][] = { 
      { "Standard Alarm", "com.android.alarmclock", 
        "com.android.alarmclock.AlarmClock" }, 
      { "HTC Alarm ClockDT", "com.htc.android.worldclock", 
        "com.htc.android.worldclock.WorldClockTabControl" }, 
      { "Standard Alarm ClockDT", "com.android.deskclock", 
        "com.android.deskclock.AlarmClock" }, 
      { "Froyo Nexus Alarm ClockDT", 
        "com.google.android.deskclock", 
        "com.android.deskclock.DeskClock" }, 
      { "Moto Blur Alarm ClockDT", 
        "com.motorola.blur.alarmclock", 
        "com.motorola.blur.alarmclock.AlarmClock" }, 
      { "Samsung Galaxy S", "com.sec.android.app.clockpackage", 
        "com.sec.android.app.clockpackage.ClockPackage" } }; 

    boolean foundClockImpl = false; 

    for (int i = 0; i < clockImpls.length; i++) 
    { 
     String packageName = clockImpls[i][1]; 
     String className = clockImpls[i][2]; 
     try 
     { 
     ComponentName cn = new ComponentName(packageName, className); 
     packageManager.getActivityInfo(cn,PackageManager.GET_META_DATA); 
      AlarmClockIntent.setComponent(cn); 
      foundClockImpl = true; 
     } catch (NameNotFoundException nf) 
     { 
      Log.v("foundclock", nf.toString()); 
     } 
    } 
    if (foundClockImpl) 
    { 
     return AlarmClockIntent; 
    } 
    else 
    { 
     return null; 
    } 

} 

私はエミュレータでアプリケーションを実行し、この作品をクリックします。アンドロイド4.0.3でテストしました。

+0

さらに多くのログステートメントを入れ、ブロックされている場所を確認する必要があります。このレシーバクラスのインテントフィルタは何ですか?それともAppWidgetProviderクラスですか? – San

答えて

0

おそらく、新しいクロック実装を持つ新しいデバイスがあります。これはclockImplsリストにはありません。たとえば、あなたが新しいのXperia Zのクロックを持っている場合は、リストに追加することができます。どこかの完全なリストを作成する

{ "Sony Ericsson Xperia Z", "com.sonyericsson.organizer", "com.sonyericsson.organizer.Organizer_WorldClock" } 

ニースのアイデアを。

関連する問題