Android-如何将数据从活动发送到服务?

时间:2015-02-25 03:55:05

标签: java android android-intent

在我的应用程序中,我正在尝试将数据从MainActivity.class发送到名为bgservice.class的服务。这是我的以下代码:

MainActivity.class:

public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  Intent serviceIntent = new Intent(bgservice.class.getName());
  serviceIntent.putExtra("UserID", "123456");
  this.startService(serviceIntent);
}

bgservice.class:

@Override
public int onStartCommand(Intent intent, int flags, int startId) {

  String userID = intent.getStringExtra("userID");
  System.out.println(userID);
  Toast.makeText(this,userID, Toast.LENGTH_LONG).show();
  return START_STICKY;

}

但我没有在服务类中获取数据。这些是我得到的以下错误:

  

02-25 09:05:41.166:E / AndroidRuntime(2633):

     

java.lang.RuntimeException:无法启动活动
  ComponentInfo {com.microapple.googleplace / com.microapple.googleplace。   MainActivity}:java.lang.IllegalArgumentException:服务意图必须   明确:Intent {act = com.microapple.googleplace.bgservice(has   额外的)}

的AndroidManifest.xml:

     ...
    <application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >

    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >



        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <service android:enabled="true" android:name=".bgservice" />
</application>
....

2 个答案:

答案 0 :(得分:4)

Intent serviceIntent = new Intent(YourActivity.this, bgservice.class);
        serviceIntent.putExtra("UserID", "123456");
        this.startService(serviceIntent);

在您的服务中,

public int onStartCommand(Intent intent, int flags, int startId) {

    String userID = intent.getStringExtra("UserID");

    //do something

    return START_STICKY;

}

这必须有效。

答案 1 :(得分:3)

下面:

 Intent serviceIntent = new Intent(bgservice.class.getName());

将String传递给Intent构造函数以创建Intent以启动Service。 Intent构造函数将String作为我们在AndroidManifest.xml中添加的Action名称。

<service android:enabled="true" android:name=".bgservice">
<intent-filter >
        <action android:name="com.microapple.googleplace.bgservice" />
    </intent-filter>
</service>

现在使用com.microapple.googleplace.bgservice作为操作名称来创建Intent:

      Intent serviceIntent = new Intent("com.microapple.googleplace.bgservice");
      serviceIntent.putExtra("UserID", "123456");
      this.startService(serviceIntent);

使用Intent constrictor,它将Context作为第一个参数和我们想要作为第二个参数开始的组件名称:

  Intent serviceIntent = new Intent(this,bgservice.class);
  serviceIntent.putExtra("UserID", "123456");
  this.startService(serviceIntent);

并使用相同的密钥,用于在Intent中添加数据,当前使用UserID键添加值,但尝试使用userID键获取值