2011-08-29 55 views
7

我正在尝试意向服务。这是我用它来称呼它意向服务永远不会打电话

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);}}); 

但是在我的更新位置类,它永远不会打我的任何破发点。

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。我使用这个,因为我想用一个报警管理器来调用它。然而,在按钮单击时,我想显示一个进度对话框,我将在哪里放置一个意向服务的进度对话框? (迄今为止我只有过异步任务的经验)

+0

我没有这方面的专家,但你不必须注册您的接收器,并设置一个过滤器,你要拍摄的particulat意图是什么?当我这样做了,我在代码中做了,但我认为它也可以在Manifest/xml中完成 – Kerry

+0

你能告诉我一个例子吗?我不太清楚你的意思是通过筛选 – Sean

+0

有时你在'AndroidManifest.xml'中给出了错误的'android:name',它可能没有包名 –

回答

15

你有没有在AndroidManifest.xmldeclare your service?它不会被调用,除非它的声明如下:

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

的开头就是问题了,谢谢 – Sean

+1

这个名字是相对于清单标签中定义的'package'的。如果您的清单标签的'package'定义为'com.example',并且您的服务位于'com.example.data'中,那么服务的名称将需要为'.data.ExampleService'。 –

3

添加下面的行可以让您逐步完成服务。确保在不调试时将其删除。如果你不处理你的服务将停止在这一点,并不会继续。

android.os.Debug.waitForDebugger(); 
+0

我会在startservice之前或之后放这行吗? – Sean

+0

它进入您的IntentService。把它放在你的断点之前,或者onHandleIntent() – bradley4