2012-07-13 34 views
5

Ich versuche, eine Absicht von onCreate in einer Aktivität zu senden, um einen IntentService zu starten. Der onHandleIntent des IntentService wird jedoch niemals empfangen. Ich habe versucht, das Manifest mit Intent-Filtern zu verändern, aber nichts scheint zu funktionieren. Es werden keine Ausnahmen ausgelöst, aber der IntentService wird einfach nicht aufgerufen. HierIntentService wird nicht aufgerufen

ist die onCreate

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    db = new TwitterDB(this); 
    String[] columns = new String[1]; 
    columns[0] = TwitterDB.TEXT; 
    tAdapter = new SimpleCursorAdapter(this, 0, null, columns, null, 0); 
    tweets = (ListView)findViewById(R.id.listtwitter); 
    tweets.setAdapter(tAdapter); 

    Intent intent = new Intent(this, SyncService.class); 
    intent.putExtra("action", SyncService.TWITTER_SYNC); 
    this.startService(intent); 

} 

Hier ist der Schöpfer und onHandleIntent der IntentService Klasse, ich weiß es nicht, weil logcat zeigt „Abgerufen Absicht“ nie aufgerufen wird. Der Konstruktor wird nicht aufgerufen, entweder (Es gab dort ein Protokoll Anruf, aber ich entfernt es.

public SyncService(){ 
    super("SyncService"); 
    twitterURI = Uri.parse(TWITTER_URI); 
    Log.i("SyncService", "Constructed"); 
} 

@Override 
public void onHandleIntent(Intent i){ 
    int action = i.getIntExtra("action", -1); 
    Log.i("SyncService", "Retrieved intent"); 
    switch (action){ 
     case TWITTER_SYNC: 
      try{ 
       url = new URL(twitterString); 
       conn = (HttpURLConnection)url.openConnection(); 
       syncTwitterDB(); 
       conn.disconnect(); 
      }catch(MalformedURLException e){ 
       Log.w("SyncService", "Twitter URL is no longer valid."); 
       e.printStackTrace(); 
      }catch(IOException e){ 
       Log.w("SyncService", "Twitter connection could not be established."); 
       e.printStackTrace(); 
      } 
      break; 
     default:; 
      // invalid request 
    } 
} 

Und hier ist die Manifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.twitter" 
    android:versionCode="1" 
    android:versionName="1.0" > 

<uses-sdk android:minSdkVersion="15" /> 
<uses-permission android:name="android.permission.INTERNET"/> 
<application android:icon="@drawable/ic_launcher"    
     android:label="@string/app_name" > 
    <activity 
     android:name=".TwitterTwoActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     <service android:name="SyncService"/> 
    </activity> 
</application> 
</manifest> 

Antwort

7

Dienst Erklärung außerhalb des Anwendungsbereichs des TwitterTwoActivity in der XML-Datei zu verschieben, wie ich es hier getan habe:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.twitter" 
    android:versionCode="1" 
    android:versionName="1.0" > 

<uses-sdk android:minSdkVersion="15" /> 
<uses-permission android:name="android.permission.INTERNET"/> 
<application android:icon="@drawable/ic_launcher"    
     android:label="@string/app_name" > 
    <activity 
     android:name=".TwitterTwoActivity" 
     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:name="SyncService"/> 

</application> 
</manifest> 
7

Sie müssen den Pfad zu dem Dienst definieren, in Ihrem Manifest, ist den Namen man einfach nicht ausreichend.

ändern

<service android:name="SyncService"/> 

zu

<service android:name=".SyncService"/> 

wenn SyncService in der Wurzel des Pakets ist, fügen Sie entsprechende Ordner vor .SyncService, wenn nötig.

+0

Danke, die richtige Praxis ist, aber es ist in den richtigen Ordnern, ich glaube, – Jbad26