2017-12-07 11 views
0

サービスを使用して音楽をバックグラウンドで再生するアプリケーションを開発しています。 私たちがヒットしたときに音楽が停止すると一時停止しますが、アプリケーションに戻ると音楽が再開しません。アプリケーションを再開したときにサービスを使用して音楽を再開する

public class backService extends Service implements ComponentCallbacks2 { 
    private MediaPlayer mp; 
    SharedPreferences sharedpreferences; 
    public Boolean musicSwitch; 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
     return START_STICKY; 
} 

@Override 
public void onDestroy() { 
super.onDestroy(); 
if (mp != null){ 
     mp.stop(); 
     mp.release(); 
    } 
} 

@Override 
public void onCreate() { 
    super.onCreate(); 
    sharedpreferences = getSharedPreferences(mypreference, 
      Context.MODE_PRIVATE); 
    musicSwitch = sharedpreferences.getBoolean("music", true); 
    if(musicSwitch){ 
     mp = MediaPlayer.create(this, R.raw.all); 
     mp.setLooping(true); 
     mp.start(); 
    } 
} 



@Override 
public void onTrimMemory(final int level) { 
    if (level == ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN) { 
     if(mp != null){ 
      mp.pause(); 
     } 
    } 
} 

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

私はonResumeメソッドを使用してみましたが、我々は戻ってアプリケーションに取得するときに、アプリケーションが音楽を再開したいのですが、サービスにはonResume方法がありません。 TIA

答えて

0

1)あなたはサービス(bindService(serviceIntent))に結合し、Binderインタフェース https://developer.android.com/guide/components/bound-services.html#Binder

public class LocalService extends Service { 
// Binder given to clients 
private final IBinder mBinder = new LocalBinder(); 
// Random number generator 
private final Random mGenerator = new Random(); 

/** 
* Class used for the client Binder. Because we know this service always 
* runs in the same process as its clients, we don't need to deal with IPC. 
*/ 
public class LocalBinder extends Binder { 
    LocalService getService() { 
     // Return this instance of LocalService so clients can call public methods 
     return LocalService.this; 
    } 
} 

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

/** method for clients */ 
public int getRandomNumber() { 
    return mGenerator.nextInt(100); 
} 
} 

活動を使用することができます)OS How can we prevent a Service from being killed by OS?

2による殺傷からそれを防ぐために、フォアグラウンドサービスを作成する必要があります:

public class BindingActivity extends Activity { 
LocalService mService; 
boolean mBound = false; 

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

@Override 
protected void onStart() { 
    super.onStart(); 
    // Bind to LocalService 
    Intent intent = new Intent(this, LocalService.class); 
    bindService(intent, mConnection, Context.BIND_AUTO_CREATE); 
} 

@Override 
protected void onStop() { 
    super.onStop(); 
    unbindService(mConnection); 
    mBound = false; 
} 

/** Called when a button is clicked (the button in the layout file attaches to 
    * this method with the android:onClick attribute) */ 
public void onButtonClick(View v) { 
    if (mBound) { 
     // Call a method from the LocalService. 
     // However, if this call were something that might hang, then this request should 
     // occur in a separate thread to avoid slowing down the activity performance. 
     int num = mService.getRandomNumber(); 
     Toast.makeText(this, "number: " + num, Toast.LENGTH_SHORT).show(); 
    } 
} 

/** Defines callbacks for service binding, passed to bindService() */ 
private ServiceConnection mConnection = new ServiceConnection() { 

    @Override 
    public void onServiceConnected(ComponentName className, 
      IBinder service) { 
     // We've bound to LocalService, cast the IBinder and get LocalService instance 
     LocalBinder binder = (LocalBinder) service; 
     mService = binder.getService(); 
     mBound = true; 
    } 

    @Override 
    public void onServiceDisconnected(ComponentName arg0) { 
     mBound = false; 
    } 
} 
} 

3)その後、アクティビティonResumeで、バインダのメソッドを呼び出して音楽を制御することができます

関連する問題