2013-04-30 24 views
3

我想在我的android應用程序中運行startService(),但它不工作。startService()沒有運行在android

下面是從調用的代碼來啓動服務:

Intent mPositioningIntent = new Intent(this, MyGeoloqiPositioning.class); 
    stopService(mPositioningIntent); 
    startService(mPositioningIntent); 

下面是從MyGeoloqiPositioning.java代碼(注意,這被認爲是從MapAttack的源代碼稍作修改)

package com.example.manhunttwopointoh; 

import android.app.Service; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 
import android.os.Bundle; 
import android.os.IBinder; 
import android.util.Log; 
import android.util.Pair; 
import android.widget.Toast; 

import com.example.manhunttwopointoh.MyFix; 
import com.example.manhunttwopointoh.MyGeoloqiFixSocket; 
import com.example.manhunttwopointoh.MyUDPClient; 

public class MyGeoloqiPositioning extends Service implements LocationListener { 
    public static final String TAG = "GeoloqiPositioning"; 

    private int batteryLevel = 0; 

    MyGeoloqiFixSocket fixSocket; 

    @Override 
    public void onCreate() { 
     android.os.Debug.waitForDebugger(); 
     Toast.makeText(MyGeoloqiPositioning.this, "MyGeoloqiPositiong in onCreate()", Toast.LENGTH_LONG).show(); 
     if (isConnected()) { 
      fixSocket = MyUDPClient.getApplicationClient(this); 
     } else { 
      // TODO: This is a crude check. Should probably be rolled into UDPClient class directly. 
      Log.w(TAG, "Network unavailable! Stopping positioning service."); 
      stopSelf(); 
     } 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    public void onStart(Intent intent, int startid) { 
     Toast.makeText(MyGeoloqiPositioning.this, "MyGeoloqiPositiong in onStart()", Toast.LENGTH_LONG).show(); 
     registerReceiver(batteryReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); 
     for (String provider : ((LocationManager) getSystemService(LOCATION_SERVICE)).getAllProviders()) { 
      if (!provider.equals("passive")) { 
       MyADB.log("Registering for updates with " + provider); 
       ((LocationManager) getSystemService(LOCATION_SERVICE)).requestLocationUpdates(provider, 0, 0, this); 
      } 
     } 
    } 

    public void onStop() { 
     unregisterReceiver(batteryReceiver); 
     ((LocationManager) getSystemService(LOCATION_SERVICE)).removeUpdates(this); 
    } 

    @Override 
    public void onDestroy() { 
     unregisterReceiver(batteryReceiver); 
     ((LocationManager) getSystemService(LOCATION_SERVICE)).removeUpdates(this); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startid) { 
     Toast.makeText(MyGeoloqiPositioning.this, "MyGeoloqiPositiong in onStartCommand()", Toast.LENGTH_LONG).show(); 
     onStart(intent, startid); 
     return Service.START_REDELIVER_INTENT; 
    } 

    @Override 
    public void onLocationChanged(Location location) { 
     Toast.makeText(MyGeoloqiPositioning.this, "MyGeoloqiPositiong in onLocationChanged()", Toast.LENGTH_LONG).show(); 
     @SuppressWarnings("unchecked") 
     MyFix lqLocation = new MyFix(location, new Pair<String, String>("battery", "" + batteryLevel)); 

     if (isConnected()) { 
      fixSocket.pushFix(lqLocation); 
     } else { 
      // TODO: This is a crude check. Should probably be rolled into UDPClient class directly. 
      Log.w(TAG, "Network unavailable, failed to push location fix!"); 
     } 
    } 

    @Override 
    public void onProviderDisabled(String provider) { 
    } 

    @Override 
    public void onProviderEnabled(String provider) { 
    } 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 
    } 

    BroadcastReceiver batteryReceiver = new BroadcastReceiver() { 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      batteryLevel = intent.getIntExtra("level", 0); 
     } 
    }; 

    /** Determine if the network is connected and available. */ 
    private boolean isConnected() { 
     ConnectivityManager manager = (ConnectivityManager) getApplicationContext() 
       .getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo activeNetwork = manager.getActiveNetworkInfo(); 

     return (activeNetwork != null && activeNetwork.isConnected()); 
    } 
} 

我試着在MyGeoloqiPositioning中插入一個斷點,但沒有任何結果。我也會舉行各種Toast()調用,但仍然沒有骰子。我的GeoloqiPositioning.java永遠不會被調用。我究竟做錯了什麼?

編輯:

這裏是清單文件中的新代碼:

<service 
     android:name="com.manhunttwopointoh.MyGeoloqiPositioning" 
     android:enabled="true" 
     android:exported="false" 
     android:process=":lqRemote" > 
     <intent-filter> 
      <action android:name="com.manhunttwopointoh.MyGeoloqiPositioning" /> 
     </intent-filter> 
    </service> 

我嘗試添加的意圖過濾器標籤,但仍然一無所獲。我也沒有註冊日誌。這裏是代碼(註釋stopService()):

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_geoloqi); 

     Intent mPositioningIntent = new Intent(this, MyGeoloqiPositioning.class); 
     //stopService(mPositioningIntent); 
     startService(mPositioningIntent); 
     Toast.makeText(PreyGeoloqi.this, "testing mPositioningIntent: " + mPositioningIntent.toString(), Toast.LENGTH_LONG).show(); 
} 

我仍然沒有得到任何東西。我是否需要在MyPreyGeoloqi.java中顯式調用方法?我很迷惑......

+0

向我們展示您擁有startservice的課程。因爲使用這個代碼'Intent mPositioningIntent = new Intent(this,MyGeoloqiPositioning.class); stopService(mPositioningIntent); startService(mPositioningIntent);'服務在啓動後啓動並停止。 – 2013-04-30 05:20:35

+0

可能是你的日誌會說點什麼。 – 2013-04-30 05:23:26

回答

3

嘗試在AndroidManifest增加一個意圖過濾服務定義:

<!-- snippet from Android Manifest file --> 
<service android:name="com.manhunttwopointoh.MyGeoloqiPositioning" android:enabled="true" android:process=":lqRemote" > 
    <intent-filter> 
     <action android:name="com.manhunttwopointoh.MyGeoloqiPositioning" /> 
    </intent-filter> 
</service> 

這允許您服務,收到您的活動發來的意圖。

+1

我添加了一個顯示我添加的內容的編輯。它仍然沒有解決它。 – qwikLup 2013-04-30 23:26:07