Intent Service 从未被调用

7

我正在尝试使用Intent服务。这是我用来调用它的方法。

    Button updateLocation = (Button) findViewById(R.id.btnUpdateLocation);
        updateLocation.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                Intent updateLocIntent=new Intent(ImTracking.this,UpdateLocation.class);
                startService(updateLocIntent);}});

然而,在我的UpdateLocation类中,它从未触发任何断点。
    public class UpdateLocation extends IntentService{

    public UpdateLocation() {
        super("UpdateLocation");
    }


    @Override
    protected void onHandleIntent(Intent intent) {

                SharedPreferences prefs = getSharedPreferences("Settings", 0);
                final String id = prefs.getString("ID", "");
                DefaultHttpClient httpclient = new DefaultHttpClient();
                HttpPost httpost = new HttpPost(
                        "http://iphone-radar.com/gps/gps_locations");

                JSONObject holder = new JSONObject();
...

发生了什么?

谢谢

PS. 我想使用闹钟管理器调用这个,但是在按钮点击时我想显示一个进度对话框,我应该在意图服务中放置进度对话框?(到目前为止,我只有使用异步任务的经验)


我对此不是专家,但您不必注册接收器并设置筛选器以捕获您希望捕获的特定意图吗?当我做过这个时,我是在代码中完成的,但我认为也可以在清单/XML中完成。 - D-Dᴙum
你能给我一个例子吗?我不太确定你所说的过滤器是什么意思。 - Sean
有时候你在AndroidManifest.xml中写错了android:name,可能是没有写包名的缘故。 - Pratik Butani
2个回答

15

您是否在AndroidManifest.xml文件中声明了您的服务?如果没有这样声明,服务将不会被调用:

<manifest ... >
  ...
  <application ... >
      <service android:name=".ExampleService" />
      ...
  </application>
</manifest>

1
名称与清单标记中定义的“包”相关。如果您的清单标记将package定义为com.example,而您的服务在com.example.data中,则服务的名称将需要是.data.ExampleService - Corey Ogburn

3
在代码中添加下面这行将允许您逐步调试服务。请确保在调试完成后将其删除,否则您的服务处理将停留在此处并无法继续执行。
android.os.Debug.waitForDebugger();

我应该在startservice之前还是之后放置这行代码? - Sean
它放置在您的IntentService内。将其放置在断点之前或放置在onHandleIntent()的开头。 - bradley4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接