まず第一に、彼の答えに感謝します。かなり良さそうですが、試す時間があるかどうかはわかりません。今週または次回同様の問題が発生したときにできる場合は約束します。
最後に、私はこの方法でトリックを行いました:
1 - メソッド onStopMediaPlayer(); を使用してインターフェイスを作成します。//たとえば、MediaPlayerStopInterface を呼び出します
public interface MediaPlayerStopInterface {
/**
* Called when the player timer ends
*/
public void onStopMediaPlayer();
}
2 - 私の活動クラスは、画像を切り替えるインターフェースを実装しています。
public class PortadaActivity extends Activity implements MediaPlayerStopInterface{
public void onStopMediaPlayer(){
//Switch images or whatever
}
}
3 - シングルトン クラスには、インターフェイス MediaPlayerStopInterface の型のオブジェクトがあります。
public class AudioControllerClass { //The Singletton Java Class
private MediaPlayerStopInterface currentActivity;
public void setCurrentActivity(MediaPlayerStopInterface mpsi){
currentActivity=mpsi;
}
}
4 - onResume() のアクティビティ クラスは Singlettonclass.setStoppedPlayerInterface(this) を実行するため、実行中のアクティビティの参照が常にあります。
public class PortadaActivity extends Activity implements MediaPlayerStopInterface{
public void onResume() {
AudioControllerClass.getInstance(getApplicationContext()).setCurrentActivity(this); //In every resume the singletton class knows who was the last one in being active
}
}
5 - タイマーが実行されると、Activitie クラスの参照があるため、object_StoppedPlayerInterface.stoppedPlayer(); を呼び出すだけです。
public class AudioControllerClass { //The Singletton Java Class
class TimerRadio extends TimerTask {
public void run() {
if(whatever==true){
currentActivity.onStopMediaPlayer();
}
}
}
}
最後に、私はそれをコーディングしませんでしたが、「UI スレッドのみが彼のビューに触れることができる」例外が必要ない場合は、アクティビティでの onStopMediaplayer へのコールバックをハンドラーで行う必要があります:P
それは完全に機能します:)。しかし、それが本当に悪い習慣なのか、それほどひどいものではないのかはわかりませんxD
とにかくありがとうジャメオ。あなたのサウンドははるかにエレガントです :P