2012-02-13 10 views
0

私は面白い問題に遭遇しました。私は、押されるとOnClickPendingIntentを起動してサウンドを再生するサービスを呼び出すウィジェットを持っています。しかし時々、約1時間、それ自体で発火するでしょう。Android OnClickPendingIntent(ウィジェット - >サービス)それ自体で起動します

ウィジェット:

public class WidgetActivity extends AppWidgetProvider { 
    @Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, 
      int[] appWidgetIds) { 

     RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout); 
     Intent intent = new Intent(context.getApplicationContext(), SilentService.class); 
     intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds); 

     PendingIntent pendingIntent = PendingIntent.getService(
       context.getApplicationContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
     remoteViews.setOnClickPendingIntent(R.id.layout, pendingIntent); 

     appWidgetManager.updateAppWidget(appWidgetIds, remoteViews); 

     context.startService(intent); 
    } 


} 

サービス:

public class SilentService extends Service { 
    @Override 
    public void onStart(Intent intent, int startId) { 

     Log.e("UpdateWidgetService", "Called"); 

     final AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this.getApplicationContext()); 

     int[] appWidgetIds = intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS); 

     if (appWidgetIds.length > 0) { 
      for (final int widgetId : appWidgetIds) { 

       final RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.widget_layout); 

       remoteViews.setImageViewResource(R.id.ivc, R.drawable.pic1); 
       appWidgetManager.updateAppWidget(widgetId, remoteViews); 

       MediaPlayer mpl = MediaPlayer.create(this, R.raw.music1); 

       int intRand = random.nextInt(5)+1; 

       Log.e("r",String.valueOf(intRand)); 

       mpl.start(); 

       mpl.setOnCompletionListener(new OnCompletionListener() { 

        public void onCompletion(MediaPlayer mp) { 
         remoteViews.setImageViewResource(R.id.ivc, R.drawable.pic2); 
         appWidgetManager.updateAppWidget(widgetId, remoteViews); 
        } 
        }); 


      } 
      stopSelf(); 
     } 
     super.onStart(intent, startId); 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 
} 

ありがとう!

答えて

1

Androidがサービスを停止していて、コードがもう一度起動しようとしているような気がします。私は同様の問題を見てきました。 http://developer.android.com/guide/topics/fundamentals.html#proclife

Androidがメモリを取り戻そうとした後でサービスが再起動すると、サービスを開始しようとしている新しいメディアプレーヤーが作成され、バックアップが開始されます。これは、コードがどのように設定されているかを正確に把握していない私の前提ですが、私が見ていることに基づいて、その可能性が最も高いです。

関連する問題