2016-11-25 5 views
0

ich eine Aktivität haben, die eine BaseActivity erstreckt, in denen in der BaseActivity es schafft auch einen Thread, um einen Mediaplayer in allen Aktivitäten in einem anderen Thread, hier zu spielen ist mein Code:Spielen Mediaplayer über alle Aktivitäten

in meinem MainActivity:

public class MainActivity extends BasedActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    beginBGMusic(); 
    } 
} 

in meinem BasedActivity:

public class BasedActivity extends AppCompatActivity { 

MediaPlayer BGMusicPlayer; 
Thread BGMusic; 

@Override 
protected void onPause() { 
    super.onPause(); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
} 

protected void beginBGMusic(){ 
    BGMusic = new Thread(){ 

     public void run(){ 
      BGMusicPlayer = MediaPlayer.create(this,R.raw.music.mp3); 
     } 
    }; 

    BGMusic.start(); 
    } 
} 

jedoch erwartet, dass der MediaPlayer.create() einen Kontext, verstehe ich nicht, wie shou ld ich setze den Kontext, wenn er in einem Thread und auch in einer anderen Klasse ist.

Kann jemand das Problem mit meinem Ansatz lösen?

Danke!

+0

Wenn Sie den gleichen Media Player für mehrere Aktivitäten benötigen, sollten Sie den Media Player nicht innerhalb von Thread starten, sondern innerhalb von Service erstellen. Auf eine einzelne Instanz des Media Players kann dann über mehrere Aktivitäten zugegriffen werden. – Avi

+0

Schafft die Erstellung in einem Thread die Idee, den Media Player über Aktivitäten hinweg spielen zu lassen? @Avi – KTOV

+0

Wenn Sie einen Thread verwenden möchten, erstellen Sie eine Singlton-Klasse, sodass Sie den Thread nicht jedes Mal erstellen müssen, wenn Sie BaseActivity thread haben, sodass bei jedem Start einer neuen Aktivität ein neuer Thread erstellt wird. – Avi

Antwort

0
/** 
* Class MediaManager created on 11/07/16 - 4:01 PM. 
* All copyrights reserved to the Zoomvy. 
* Class behaviour is to initialize and play a media file on notification 
*/ 
public class MediaManager { 

    /** 
    * SingleTon instance 
    */ 
    private static MediaManager sInstance; 

    private Context mContext; 


    private MediaManager(Context context) { 
     mContext = context.getApplicationContext(); 
    } 

    public static MediaManager getInstance(Context context) { 
     if (null == sInstance) { 
      synchronized (MediaManager.class) { 
       sInstance = new MediaManager(context); 
      } 
     } 
     return sInstance; 
    } 
} 

Oben ist die Singleton-Klasse für den Media Manager hier können Sie weiter den Media-Player Referenz definieren und wird es einzelne Instanz für alle Ihre Tätigkeit sein.

Aber ich empfehle immer, Service anstelle von Thread here zu verwenden, können Sie ein Beispiel für MediaService finden.

Verwandte Themen