从Service类调用活动类方法

从Service类调用活动类方法

我在SO中看过很多关于此的帖子,但无法从服务类调用一个活动方法的确切和最简单的方法。广播接收器只是选项吗?没有捷径 ?我只需要在Service类中准备好媒体播放器后在Activity类中调用以下方法。

活动类:

    public void updateProgress() {
    // set Progress bar values
    songProgressBar.setProgress(0);
    songProgressBar.setMax(100);
    // Updating progress bar
    updateProgressBar();}

服务类:

   @Overridepublic IBinder onBind(Intent intent) {
    Log.d(this.getClass().getName(), "BIND");
    return musicBind;}@Overridepublic boolean onUnbind(Intent intent) {
    return false;}
    @Overridepublic void onPrepared(MediaPlayer mp) {
    try {
        mp.start();
    } catch (IllegalStateException e) {
        e.printStackTrace();
    }

           // updateProgress();// Need to call the Activity method here 
  }


侃侃无极
浏览 558回答 3
3回答

慕妹3146593

我创建了一个名为Delegate的通用类(它不是一个特殊的名称,你可以将它命名为John)并将MainActivity类作为静态字段传递给它。然后,我现在可以从服务中访问它。我不确定它是否具有成本效益,但它解决了我的问题。我的服务:package com.some.package;import com.google.firebase.iid.FirebaseInstanceId;import com.google.firebase.iid.FirebaseInstanceIdService;public class FirebaseInstanceIDService extends FirebaseInstanceIdService {     @Override     public void onTokenRefresh() {         String token = FirebaseInstanceId.getInstance().getToken();         Delegate.theMainActivity.onDeviceTokenChange(token);     }}代表班:package com.some.package;public class Delegate {     static MainActivity theMainActivity;}我在MainActivity中做了什么:protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     Delegate.theMainActivity = this;     //rest of the code...}public void onDeviceTokenChange(String token){     Log.e("updated token:", token);}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android