当前位置: 首页 > 知识库问答 >
问题:

恢复应用程序时恢复音乐使用服务

赵才俊
2023-03-14
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

共有1个答案

越英范
2023-03-14

1)您需要创建前台服务来防止它被OS杀死我们如何防止一个服务被OS杀死?

2)可以绑定服务(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);
}
}

活动:

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;
    }
}
}
 类似资料:
  • 我有一个应用程序运行Youtube API并在特定视图中播放视频。当视频播放时,任何后台应用程序的音乐都会暂停。我尝试用下面的代码恢复音乐,它运行在BackPressed()上: 当我回去的时候,我无法让音乐恢复。我知道这是可能的,因为当使用snapchat时,当一段快照视频播放完毕后,背景音乐会自动恢复,但我似乎无法在我的应用程序上获得这一功能。

  • 我正在用Kotlin开发一个简单的游戏,使用LibGDX在后台播放音乐。在Android上,当用户玩游戏并按下HOME键,然后再次继续游戏时,我的暂停屏幕出现了——音乐继续播放。我想要的是,每当我的暂停屏幕显示时,音乐总是关闭。 当我开始一个新游戏时,每当我按下游戏中的“暂停”按钮,音乐就会按预期停止——然后当我点击游戏中的“继续”按钮时,音乐就会重新开始。这工作得很好。只有在按下HOME键时,我

  • 程序和人一样都需要具备一定的容错能力,学会知错就改,所以如果不是不可恢复性、导致系统无法正常工作的错误,如果发生了 panic 我们需要恢复程序,让程序继续执行,并且需要记录到底犯了什么错误 在 Go 语言中我们可以通过 defer 和 recover 来实现 panic 异常的捕获,让程序继续执行 package main import "fmt" func div(a, b int) (r

  • 下面是我使用的代码。通过这个代码,所有活动都播放背景音乐。但是当我使用home按钮返回到这个活动时,音乐正常播放,但是抽屉将不会恢复。这意味着,如果播放了音乐,我通过home按钮返回活动,那么播放按钮将显示,而不是暂停按钮,但我希望,如果在resume上播放了音乐,那么按钮将是暂停,如果不是,则显示播放按钮。 你能告诉我在恢复活动时如何使用“播放”和“暂停”按钮吗?

  • 在一个android应用中,我编写了一个在后台播放音乐的服务。我已经实现了来监听音频焦点的更改。问题是,在以下情况下,我没有收到对的回调。 > 在我的应用程序中播放音乐,并将应用程序放在后台。(背景不断播放音乐)。 启动youtube应用程序,播放任何视频。这将回调,在此我暂停媒体播放器。 现在我为youtube按home键(youtube停止播放)。

  • 我有一个web应用程序托管在Azure中,带有一个linux容器,其图像存储在Azure容器注册表中。web应用程序运行良好,我已配置了几个应用程序设置。其中一个设置是:网站\启用\应用\服务\存储=TRUE 但是,当我更新容器映像时,这个特定的应用程序设置将恢复为false。 我已尝试通过portal和az cli删除该设置并再次添加它,但在更新后保持该值为TRUE仍然没有成功。诊断和解决问题-