2

私はserviceそれを実装していますLocationListener。私は自分の活動からそのサービスを開始しています。アプリは正常に動作しますが、データ接続または停止を無効wifiにすると、有効にするとサービスが開始されます。serviceなぜこれが起こるのか知りたいですか?助けてください。

これが私のサービスです

public class MyService extends Service implements LocationListener {
    LocationManager LocationMngr;
    @Override
    public void onCreate() {
      super.onCreate();

          Log.i("PML", "MyService Started...");

          Toast.makeText(getApplicationContext(), 
                "In Service's onCreate Method" ,Toast.LENGTH_LONG).show();
          startLocationListener();
    }

    private void startLocationListener() {
        this.LocationMngr = (LocationManager)
                                  getSystemService(Context.LOCATION_SERVICE);
    this.LocationMngr.requestLocationUpdates
                      (LocationManager.NETWORK_PROVIDER, 2*60*1000, 0, this);
    }

    public void onLocationChanged(Location location) {
          //saving location
    }                              
    public void onProviderDisabled(String provider) { }
    public void onProviderEnabled(String provider) { }                             
    public void onStatusChanged(String provider, int status, Bundle extras) {}

    @Override
    public void onDestroy() {
            super.onDestroy();
            this.LocationMngr.removeUpdates(this);
            Log.i("PML","MyService Stopped...");        
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
            super.onStartCommand(intent, flags, startId); 
            return START_STICKY;
    }

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

私の放送受信機

public class BootReceiver extends BroadcastReceiver {

final String ACTION = "android.net.conn.CONNECTIVITY_CHANGE";   

    @Override
    public void onReceive(Context context, Intent intent) {

         AndroidServiceManager manager = new AndroidServiceManager(context);
         //This intent is received when android device restarts 

         if(Intent.ACTION_BOOT_COMPLETED.equalsIgnoreCase(intent.getAction())) {
                Toast.makeText(context,"Device Rebooted",Toast.LENGTH_LONG).show();
                 if(!manager.isMyServiceRunning(context)) {
                        manager.startMyService();
                 } 
         }

         //This intent is received when android device shuts down
         if(Intent.ACTION_SHUTDOWN.equalsIgnoreCase(intent.getAction())) {
          //some database operation
         }

     //This intent is received when airoplane mode changes
         if(Intent.ACTION_AIRPLANE_MODE_CHANGED
                    .equalsIgnoreCase(intent.getAction().intern())) {
             //some database operation
         }  

         if(ACTION.equalsIgnoreCase(intent.getAction())) {
              boolean network = manager.isNetworkAvailable(context);
              if (network) {
                   if(!manager.isMyServiceRunning(context))
                    manager.startMyService();
              } else {
                    manager.stopMyService();
              }
          }
     } 
}

私のマニフェスト

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.xyz.ui"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="10"
    android:targetSdkVersion="17" />

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>

<application
    android:allowBackup="true"
    android:icon="@drawable/sample"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" 
    >
    <activity
        android:name="com.xyz.UserActivity"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <service android:name="com.xyz.MyService" 
            android:enabled="true"
            android:exported="false" />

    <receiver 
         android:name="com.xyz.BootReceiver">
         <intent-filter >
             <action android:name="android.intent.action.BOOT_COMPLETED" />
             <action android:name="android.intent.action.ACTION_SHUTDOWN" />
             <action android:name="android.intent.action.AIRPLANE_MODE"/>
         </intent-filter>
    </receiver>

</application>

そして、これがlogcat

インターネットまたはwifiを無効にすると、logcatに次のエントリが表示されます

05-01 17:23:24.484: I/PML(27308): MyService Stopped...

インターネットまたはwifiを有効にすると、logcatに次のエントリが表示されます

05-01 17:23:58.296: I/PML(27308): MyService Started...
4

1 に答える 1

1

私は私の間違いを発見しました..それは私が放送受信機にこのコードを持っていたからです..

if(ACTION.equalsIgnoreCase(intent.getAction())) {
          boolean network = manager.isNetworkAvailable(context);
          if (network) {
               Log.i("PML", "Start service if not running");
               if(!manager.isMyServiceRunning(context))
               manager.startMyService();
          } else {
               Log.i("PML", "Stop service");
               manager.stopMyService();
          }
}

Log.iそのため、上記のコードを追加してlogcat、無効にして有効wifiにした後に確認したところ、間違いが見つかりました。

于 2013-05-02T03:24:50.390 に答える