如何将值从Activity传递到Android中的服务?

时间:2016-05-02 22:24:47

标签: android android-activity android-service

我需要访问一个包含editText元素值的简单int变量。该值存储为Activity类的公共字段。在我的服务上,我从我的活动类中创建了一个对象:

check.getFirstPosition();

我试图通过以下方式访问它:

public void paint(){      
      addMouseListener(new MouseAdapter() {
          public void mousePressed(MouseEvent e) {
                  oldX = e.getX();
                  oldY = e.getY();
                  graphics2D.setPaint(toolBar.getCurrentColor());
                  repaint();
          }
      });



      addMouseListener(new MouseAdapter() {
          public void mouseReleased(MouseEvent e) {
              String currentPaintType = toolBar.getPaintType();
              if(currentPaintType != "FREEHAND"){
                  currentX = e.getX();
                  currentY = e.getY();
                  if(currentPaintType == "LINE"){
                      if (graphics2D != null){
                          graphics2D.drawLine(oldX, oldY, currentX, currentY);
                      }
                  }else if(currentPaintType == "OVAL"){
                      if (graphics2D != null){
                          graphics2D.drawOval(oldX, oldY,       getWidthHeight(oldX,currentX), getWidthHeight(oldY,currentY));
                      }
                  }else if(currentPaintType == "RECT"){
                      if (graphics2D != null){
                          graphics2D.drawRect(oldX, oldY, getWidthHeight(oldX,currentX), getWidthHeight(oldY,currentY));
                      }
                  }
                  repaint();
              }
          }
      });
  }

但它返回零。如何将值从活动传递到服务?

3 个答案:

答案 0 :(得分:5)

您需要使用intent在不同的Android组件之间传递数据ActivityService

Intent intent = new Intent(this, YourService.class);
intent.putExtra("your_key_here", <your_value_here>); 

然后像这样开始你的服务 -

startService(intent);

现在,您可以使用onBind()onStartCommand()(取决于您使用服务的方式)使用intent作为参数传递

String editTextValue = intent.getStringExtra("your_key_here");

您现在可以在任何地方使用editTextValue

答案 1 :(得分:3)

您无法从服务中创建类似的对象。我认为你是Java新手。当你CheckActivity check = new CheckActivity()创建CheckActivity的新实例时,毫无疑问它会返回零。你也不应该尝试在android中创建像这样的活动对象。

就您的问题而言,您可以通过广播接收器将editText值传递给您的服务。

查看this

此外,如果您在创建服务之前拥有editText值,则只需将其传递为intent extra,否则您可以使用广播方法。

在您的服务中

broadcastReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                String action = intent.getAction();
                if (action.equalsIgnoreCase("getting_data")) {
                    intent.getStringExtra("value")
                }
            }
        };

        IntentFilter intentFilter = new IntentFilter();
        // set the custom action
        intentFilter.addAction("getting_data"); //Action is just a string used to identify the receiver as there can be many in your app so it helps deciding which receiver should receive the intent. 
        // register the receiver
        registerReceiver(broadcastReceiver, intentFilter);

在您的活动中

Intent broadcast1 = new Intent("getting_data");
        broadcast.putExtra("value", editext.getText()+"");
        sendBroadcast(broadcast1);

同时在onCreate of activity中声明您的接收器并在onDestroy

中取消重新登录
unregisterReceiver(broadcastReceiver);

答案 2 :(得分:0)

  

CheckActivity check = new CheckActivity();

永远不要这样做。使用Intent代替创建活动。

  

如何将值从活动传递到服务?

您可以使用Intent方法通过context.startService()传递它。或者,您可以绑定它并通过引用传递值。

您还可以考虑使用BroadcastReceiverHandler