2016-05-14 8 views
0

Ich versuche derzeit, eine App zu erstellen, die speziell eine asynchrone Aufgabe verwenden muss. Von dem, was ich verstehe, wird eine asynchrone Task den Code unabhängig von der UI ausführen, die generiert wird, aber wenn ich sehe, dass sie implementiert wird, muss sie in den onStart, onResume-Methoden implementiert werden, die unweigerlich an eine Aktivität gebunden sind. nicht sicher, ob ich das falsch verstehe. Außerdem versuche ich, meine Klasse, die die Music Player-Klasse ist, auszuführen, aber es bleibt beim Deklarieren des Media Players hängen, und dies ist ein Kopieren und Einfügen aus einer anderen Anweisung meines Codes, die tatsächlich funktioniert. hier ist der Code:Versuchen, Hintergrundmusik auf Android-App

package mt.edu.mcast.clickermaster; 

import android.media.MediaPlayer; 
import android.os.AsyncTask; 

public class MusicPlayer extends AsyncTask<Void, Void, Void>{ 

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

@Override 
protected Void doInBackground(Void... params) { 
    MediaPlayer player = MediaPlayer.create(this,R.raw.FluteMusic); 
    player.setLooping(true); 
    player.setVolume(1.0f,1.0f); 
    player.start(); 
    return null; 
} 

@Override 
protected void onPostExecute(Void result){ 
    super.onPostExecute(result); 
} 

}

Der Fehler "Methode kann nicht aufgelöst wird sagen:‚erstellen (Musicplayer, int)", und ja, ich habe 'FluteMusic' im rohen Ordner

ich jemand schätzen, die eine Hand verleihen :)

+0

Wenn Sie den Musikplayer von Ihrer Benutzeroberfläche trennen möchten (wie der Benutzer die Musik-App ablegt und im Web surft), sollten Sie 'Service' verwenden. 'AsyncTask' scheint eine gute Option zu sein, aber es dient eigentlich einem anderen Zweck :) –

Antwort

0
MediaPlayer.create(this,R.raw.FluteMusic); 

returns „die Methode kann nicht lösen‚erstellen (Musicplayer, int)“, weil das erste Element übergeben Sie, this, ist ein Verweis t o Ihre AsyncTask, und es gibt keine Methoden in der MediaPlayer-Klasse, die eine AsyncTask als Parameter verwenden.

Was ich denke, dass Sie versuchen, indem Sie dies setzen, besteht darin, einen Kontext als Parameter zu übergeben. Sie könnten einen Konstruktor in Ihrer AsyncTask haben, um einen Verweis auf einen Kontext zu behalten.

public class MusicPlayer extends AsyncTask<Void, Void, Void>{ 

Context mContext; 

public MusicPlayer(Context context){ 
    mContext = context; 
} 

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

@Override 
protected Void doInBackground(Void... params) { 
    MediaPlayer player = MediaPlayer.create(mContext, R.raw.FluteMusic); 
    player.setLooping(true); 
    player.setVolume(1.0f,1.0f); 
    player.start(); 
    return null; 
} 

@Override 
protected void onPostExecute(Void result){ 
    super.onPostExecute(result); 
} 
+0

#legend ... Irgendeine Idee, was ich tun kann in Bezug darauf, wie ich es bei jeder Aktivität ausführen kann, ohne onPause verwenden zu müssen, onStop, onResume und andere in jeder Aktivität? –

+0

wie Saehun vorgeschlagen, für Hintergrundaufgaben, die nicht unbedingt UI erfordern, sollten Sie in Services suchen: http://developer.android.com/guide/components/services.html – Gauthier

+0

Nur Problem ist, dass mir speziell gesagt wird, Async zu verwenden Aufgabe. Ich kenne seine Wette, um Service zu verwenden, aber ich muss sicherstellen, dass ich eine Async-Aufgabe verwende. Habe ich etwas falsch gemacht? Ich bin ein Anfänger –

Verwandte Themen