为什么在我的代码中getIntent()错误红线?

时间:2019-05-06 08:07:09

标签: android parcelable

我想将可打包数据从MainActivity发送到LocationService。但是,当我想在LocationService上检索数据并键入此代码行时。但最终出现错误红线。

我已经尝试过此getIntent() wrote in red,但我想在其他方法上使用该对象,并且该对象也将变为空。

Intent intent = getIntent();

enter image description here

我希望你们能有所帮助,也许还有其他建议。谢谢

4 个答案:

答案 0 :(得分:1)

您可以使用意图传递数据

Intent serviceIntent= new Intent(Activity_Namethis,Service_Name.class);
serviceIntent.intent.putExtra(EXTRA_KEY, YOUR_OBJECT);
startService(serviceIntent);

从服务中检索数据

@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
   YOUR_CLASS _yourClassObject = intent.getParcelableExtra(EXTRA_KEY);

   return "RETURN_FLAG";
}

您还可以捆绑所有数据并添加您的意图{p {1}}

答案 1 :(得分:0)

由于您正试图从服务中调用getIntent,因此它不是服务类的方法,因此需要像调用它之前先获得Activity类的引用

activity.getIntent()

编辑:

现在要将数据从活动发送到服务,您可以实现一个接口

声明一个接口

 public interface MyIntentListener {
    public void call();
 }

现在像

一样在您的服务中实现此接口
 class yourService extends ... implements MyIntentListener {

     // other stuff
     @override
     public void call() {
     }
 }

现在要在Activity中初始化服务,您必须具有它的引用,以便可以在activity中的任何地方调用

 service.call()

答案 2 :(得分:0)

您也可以使用getIntent().getParcelableExtra(EXTRA_INFO); 您无需在其中创建烦人的“ getIntent()”意图变量。只需直接获取它即可。

答案 3 :(得分:0)

您可以将IntentService用于此类工作:

public class LocationService extends IntentService {
    public LocationService() {
        super("LocationService");
    }

    @Override
    protected void onHandleIntent(@Nullable Intent intent) {

    }

    @Override
    public int onStartCommand(@Nullable Intent intent, int flags, int startId) {
        //Get data from intent here.
    }
}

要启动并使用IntentService:

Intent serviceIntent = new Intent(context, LocationService.class);
startService(serviceIntent);

来自活动。您可以将任何类型的数据传递到serviceIntent对象。