2015-02-24 65 views
0

在嘗試找到我的IntentService(閱讀和搜索)的問題未成功後,我決定詢問關注流。我無法弄清楚這段代碼有什麼問題。我實際上想在從另一項活動收到結果後開始一項服務。我確實從該活動中獲得了結果,然後從我想要開始此服務的方法中獲得結果。需要幫助IntentService未啓動

服務起動代碼

Intent templateCreationIntent = new Intent(getApplicationContext(), TemplateCreationService.class); 
    templateCreationIntent.putExtra(TemplateCreationService.PARAM_IN_MSG,userName); 
    startService(templateCreationIntent); 

服務代碼

public class TemplateCreationService extends IntentService{ 

private static final String TAG = "TemplateCreationService"; 
public static final int STATUS_RUNNING = 0; 
public static final int STATUS_FINISHED = 1; 
public static final int STATUS_ERROR = 2; 


static final String TEST_RAW_DATA_PATH = Environment.getExternalStorageDirectory() +"/gaitDataRecording"+ "/rawTestingData" + "/acc/"; 
public static String userName; 
public static String cycleLength; 
public static final String PARAM_OUT_MSG = "omsg"; 
public static final String PARAM_IN_MSG = "imsg"; 

public TemplateCreationService() { 
    super(TemplateCreationService.class.getName()); 
    // TODO Auto-generated constructor stub 
} 

@Override 
protected void onHandleIntent(Intent intent) { 
    // TODO Auto-generated method stub 
    Log.d(TAG,"Template Creation Service Started"); 
    userName = intent.getStringExtra(PARAM_IN_MSG); 

    try { 
     Boolean b = DataProcessingStepsV2.gaitDataLoading(TRAIN_RAW_DATA_PATH, userName); 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 

     e.printStackTrace(); 
    } catch (IllegalArgumentException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    double []gaitCycleLengths = DataProcessingStepsV2.getCycleLengths(); 

    cycleLength = gaitCycleLengths.toString(); 

    // processing done here…. 
    Intent broadcastIntent = new Intent(); 
    broadcastIntent.setAction(ResponseReceiver.ACTION_RESP); 
    broadcastIntent.addCategory(Intent.CATEGORY_DEFAULT); 
    broadcastIntent.putExtra(PARAM_OUT_MSG,cycleLength); 
    sendBroadcast(broadcastIntent); 
    }  
    } 

艙單

<service android:name=".gait_authentication_segmentation.TemplateCreationService" 
    android:exported = "false"/> 

主要活動註冊接收機

IntentFilter filter = new IntentFilter(ResponseReceiver.ACTION_RESP); 
filter.addCategory(Intent.CATEGORY_DEFAULT); 
receiver = new ResponseReceiver(); 
registerReceiver(receiver, filter); 

廣播接收機

public class ResponseReceiver extends BroadcastReceiver { 
     public static final String ACTION_RESP =  
      "at.usmile.gait_authentication.intent.action.MESSAGE_PROCESSED"; 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      Toast.makeText(getApplicationContext(), intent.getStringExtra(TemplateCreationService.PARAM_OUT_MSG),Toast.LENGTH_LONG).show(); 
      //String text = intent.getStringExtra(SimpleIntentService.PARAM_OUT_MSG); 
      //result.setText(text); 
     } 
    } 
+0

它是否在ontentandvice的onHandleIntent? – 2015-02-24 06:09:58

+0

我試圖調試但它不會去onHandleIntent(Intent intent)方法 – Muhammad 2015-02-24 06:22:23

+0

檢查manifest.xml中的服務聲明,即名稱是否正確,是否是完全限定名稱。 – 2015-02-24 06:30:03

回答

0

我認爲服務在AndroidManifest.xml名稱是不正確的。它可以是:

  1. 它不是完全合格的名稱。
  2. 有一些拼寫錯誤。

嘗試使用服務名稱給出完整的軟件包名稱並試一試。

+0

非常感謝,你是對的,它是AndroidManifest.xml中服務名稱的問題,當我嘗試使用完整的包名稱啓動服務。所以我明白,如果我們在包含活動的某些包中包含service.java,那麼我們必須在服務中使用完整的包名,否則我們可以在AndroidManifest.XML中使用.ServiceName。 – Muhammad 2015-02-24 13:50:15

+0

不,我們也可以給出相對路徑服務類,但是頂部的清單標記包中的名稱+您在服務名稱中輸入的名稱應該是完全限定的名稱。例如,如果服務位於com.example.android.service包中,則manifest標籤包含package =「com.example.android」,而service標籤包含name =「。service.YourServiceName」,添加com.example.android時。 service.YourServiceName。如果仍有疑問,請提及。 – 2015-02-25 05:14:54