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

如何将数据服务传递给活动?

汝墨一
2023-03-14

我有三节课

1.菜单活动

2.LocationUpdateService

3.多重标记器

1.菜单活动

@Override
    protected void onStart() {
        super.onStart();

        bindService(new Intent(this, LocationUpdatesService.class), mServiceConnection,
                Context.BIND_AUTO_CREATE);
    }

2、LocationUpdateService:(这是服务类)

   private  void sendMessageToActivity(Location l, String msg) {
        Intent intent = new Intent("GPSLocationUpdates");
        // You can also include some extra data.
        intent.putExtra("Status", msg);
        Bundle b = new Bundle();
        b.putParcelable("Location", l);
        intent.putExtra("Location", b);
        LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
            Toast.makeText(context,"Sending Data to BroadCast Receiver",Toast.LENGTH_LONG).show();
    }

3、多重标记(活动)

 LocalBroadcastManager.getInstance(this).registerReceiver(
                mMessageReceiver, new IntentFilter("GPSLocationUpdates"));



 private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            // Get extra data included in the Intent
            String message = intent.getStringExtra("Status");
            Bundle b = intent.getBundleExtra("Location");

            Log.d("messagesshow","****** "+message);

           Location   lastKnownLoc = (Location) b.getParcelable("Location");
            if (lastKnownLoc != null) {

                Log.d("messagesshow","*****    "+String.valueOf(lastKnownLoc.getLatitude()));

            }

             Toast.makeText(context, "Data Receiver called", Toast.LENGTH_SHORT).show();
        }
    };

我的问题是:当我打开我的菜单活动我的Toast消息打印发送数据到广播接收器,然后点击按钮我调用MultipleMarker。我无法从服务中获取值。。。但当我按下后退按钮时,我重定向到MenuActivity,此时我得到了值。。。

我想将LocationUpdateservice类中的数据获取到MultipleMarker中。课堂活动。。。

共有1个答案

东门晟
2023-03-14

您可以按照以下步骤创建接口并获取服务引用:

在LocationUpdateService中添加以下属性:

public class LocationUpdateService extends Service{

    // The Binder is an intern class
    public class LocalBinder extends Binder {
        //The Binder as a method which return the service
        public LocationUpdateService getService() {
            return LocationUpdateService.this;
        }
    }

    private final IBinder mBinder = new LocalBinder();

}   

然后在您的菜单活动中:

public class MenuActivity extends AppCompatActivity {
    private LocationUpdateService mService;

    // Connection interface to the service
    private ServiceConnection mConnection = new ServiceConnection() {

        // Called when the activity connects to the service
        public void onServiceConnected(ComponentName className, IBinder service) {

        // Here you get the Service
            mService = ((LocationUpdateService.LocalBinder)service).getService();

        }

        // Called when service is disconnected
        public void onServiceDisconnected(ComponentName className) {
            mService = null;
        }
    };
}

然后您的bindService()方法将调用onServiceConnect(),您将获得Service的实例

注意:onServiceConnect()是异步调用的,因此您不能在调用bindService()后立即使用Service的方法,因为您将有一个NullPointerException。

 类似资料:
  • 我想把<代码>工作流程。睡眠调用我的Cadence活动之一,以便能够正确测试它(并模拟function产生的错误结果)。 在实现之前,我注意到两件重要的事情: 和是单独的类型。 每个活动的第一个参数 - - 是可选的,可以省略 我的尝试: 1.首次尝试 错误: "error":"无法解码活动函数输入字节错误:无法解码参数:0,*internal.Context,json错误:json:无法将对象散

  • 这可能是一个简单的问题。我尝试过谷歌搜索,但没有成功。我有一个DTO,它是从客户机传递过来的,由restful Web服务使用。但是得到这个例外 这是我的restful方法。 这是我平静的呼唤

  • 问题内容: 将变量数据从传递到类的最佳方法是什么?数据是在第一个类中创建的,我需要将该数据传递给第二个类而不使用Intent。任何代码示例将不胜感激。 自从我开始工作以来,我就打算将其发布。就我而言,我已经有一个,而我正在做的事情我需要另一个相同的类型。因此,这里去: 班级活动 我的主要活动 请注意,我必须先创建主类的实例 问题答案: 如果您的班级名称是为此创建的,并将值作为参数传递,则下面是一个

  • 问题内容: 我想将由Razor MVC帮助程序在我的登录表单中生成的RequestVerificationToken传递给我为管理应用程序身份验证而完成的AngularJS服务 我的形式如下: @ Html.AntiForgeryToken()以这种方式呈现: 我的AngujarJs控制器成功注入了我的“ loginService”,我可以通过Post发送用户名和密码到服务 服务: 我的问题是如何

  • 我使用部署到pivotal cloud foundry的spring云数据流,将spring批处理作业作为spring云任务运行,这些作业需要aws凭据才能访问s3存储桶。 我尝试将aws凭据作为任务属性传递,但凭据作为参数或属性显示在任务的日志文件中。(https://docs.spring.io/spring-cloud-dataflow/docs/current/reference/html