2016-10-28 8 views
3

私は新しいクラスライブラリ(Xamarinフォーム)を作成したフォーム。サービス(注 - ないバウンドサービス期待 - 乾杯のアプリケーションが起動したときに表示されるように/停止: -は、Visual Studioで

namespace AndroidBatteryService 
{ 
    public class AndroidBatteryService : Service 
    { 

     public AndroidBatteryService() 
     { 

     } 

     [return: GeneratedEnum] 
     public override StartCommandResult OnStartCommand(Intent intent, [GeneratedEnum] StartCommandFlags flags, int startId) 
     { 
      Toast.MakeText(this, "The Battery Service was just started", ToastLength.Long).Show(); 
      return base.OnStartCommand(intent, flags, startId); 
     } 

     public override void OnCreate() 
     { 
      base.OnCreate(); 
     } 

     public override void OnDestroy() 
     { 
      base.OnDestroy(); 
      Toast.MakeText(this, "The Battery Service has been stopped",  ToastLength.Long).Show(); 
     } 

     public override IBinder OnBind(Intent intent) 
     { 
      //started service, NOT a binded service - return null... 
      return null; 
     } 
    } 
} 

を別のプロジェクトでは、私は私は次のコードを実行し、このサービスを呼び出すいます: -

public void StartBatteryService() 
{ 
    Intent intent = new Intent(Android.App.Application.Context, typeof(AndroidBatteryService.AndroidBatteryService)); 
    Android.App.Application.Context.StartService(intent); 
} 

コードは実行されますが、実際のサービスのOnStartCommandメソッドは実行されず、それを期待しています。何か案は??

+0

私は携帯用のクラスライブラリであなたのサービスの定義を見ています。 "サービス"はポータブルクラスではなく、Androidプロジェクトに含まれている必要があります。説明できますか? –

+0

また、なぜGeneratedEnumが必要ですか? –

+0

私の最新の実験から、OnDestroy関数は呼び出されないかもしれません –

答えて

2

私はこの問題は、あなたがして、サービスクラスを飾るために必要があるということだと思う: -

[Service (Label = "AndroidBatteryService", Icon = "@drawable/Icon") ] 

これはXamarinは、ビルド時に生成のAndroidManifest.xmlファイルに次のように配置する原因となる(あなたがこれを見つけることができます\ OBJ \デバッグ\ androidのディレクトリ)

<service android:icon="@drawable/icon" android:label="AndroidBatteryService" android:name="md55...1a.AndroidBatteryService" /> 

私は私のアプリのコードの非常に類似した作品を使用し、それがうまく働きました。 (あなたはこれまでにこれを試してみたことがありますが)