为了账号安全,请及时绑定邮箱和手机立即绑定

从Service类调用活动类方法

从Service类调用活动类方法

侃侃无极 2019-08-27 13:08:52
从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    }
查看完整描述

3 回答

?
慕妹3146593

TA贡献1820条经验 获得超9个赞

我创建了一个名为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);}


查看完整回答
反对 回复 2019-08-27
  • 3 回答
  • 0 关注
  • 557 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信