2011-08-04 4 views
2

誰もがアンドロイドでサービスを再開する方法を知っていますか?私は、デバイスが起動しているときに呼び出されるサービスを持っています。私は構成を保存するためのoption.javaを持っています。アンドロイドでサービスを再開する方法は?

option.javaで設定を編集すると、サービスを再開する必要があります。

私はサービスの開始方法を知っていて、実行後は新しい設定が行われた後に再起動する方法がわかりません。あなたの要素で

startService(new Intent(this, ListenSMSservice.class)); 
+0

それを起動? – MrJre

+0

ちょうど好奇心から:設定を保存した後、なぜあなたのサービスは同じ設定から読み取れませんか?つまり、サービスを再開する必要は何ですか?あなたが設定を再読み込みしたいのであれば、なぜ観測者が観測可能なパターンではないでしょうか? – Viren

+0

@mrjre:電話機がロックされている(SMSコマンドによってトリガされている)とき、SMSを介して所有者にレポートを送信するロックスクリーンアプリケーションを作成します(オプションフォームを介してデータベースに登録されています)。所有者は、彼/彼女のデバイスがロックされていると言った。電話機の起動時にサービスが開始されるので、オプションを使用して所有者番号を変更すると、サービスは新しい設定(新しい所有者番号)を検出せず、SMSレポートを古い番号に送信します。新しい構成。そのため、私はラリーが私のサービスを再開する必要があります。何か案が? –

答えて

1

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

2)あなたの素子において()あなたのBroadcastReceiverの完全修飾[または相対]クラス名を使用してください:

<receiver android:name="com.example.MyBroadcastReceiver"> 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    </intent-filter> 
</receiver> 

public class MyBroadcastreceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Intent startServiceIntent = new Intent(context, MyService.class); 
     context.startService(startServiceIntent); 
    } 
} 

もっと精緻化のために:this

+0

このコードは、電話ブートでサービスを開始するためのものですか?私はどのようにサービスを再起動する必要があります..任意のアイデアnik ??ありがとう.. –

+0

電話を再起動すると、このコードによってサービスが自動的に開始されます。 –

+0

はい、サービスが既に起動していて、起動していないときにサービスを再開したいと思っています。ありがとう –

0

従ってobserver-observable design patternによって、私はFileObserverクラスはAndroidによって提供されます。

例えば、ここではAndroidのソースコードからWallPaperManagerService.javからの抜粋です:

だから、あなたのケースでは、あなたが設定ファイル上のファイルオブザーバ(以下のサンプルコードを参照)、その都度これを作成します設定ファイルが変更された場合、(既に実行中の)サービスからすべての値が読み込まれます。

あなたはアイデアの本質を知りたいと思っています。

/** 
* Observes the wallpaper for changes and notifies all IWallpaperServiceCallbacks 
* that the wallpaper has changed. The CREATE is triggered when there is no 
* wallpaper set and is created for the first time. The CLOSE_WRITE is triggered 
* everytime the wallpaper is changed. 
*/ 
private final FileObserver mWallpaperObserver = new FileObserver(
     WALLPAPER_DIR.getAbsolutePath(), CREATE | CLOSE_WRITE | DELETE | DELETE_SELF) { 
      @Override 
      public void onEvent(int event, String path) { 
       if (path == null) { 
        return; 
       } 
       synchronized (mLock) { 
        // changing the wallpaper means we'll need to back up the new one 
        long origId = Binder.clearCallingIdentity(); 
        BackupManager bm = new BackupManager(mContext); 
        bm.dataChanged(); 
        Binder.restoreCallingIdentity(origId); 

        File changedFile = new File(WALLPAPER_DIR, path); 
        if (WALLPAPER_FILE.equals(changedFile)) { 
         notifyCallbacksLocked(); 
        } 
       } 
      } 
     }; 
+0

あなたのコードのためにまだ混乱していますが、私は本当に感謝しています..:) –

+0

私はこのオブザーバーの関係を自分のアプリケーションに使うことを考えていますが、私はメモリ/バッテリーの使用について心配しています。オプションが変更されたときに手動で変更をプッシュするよりも、これはどのように優れたオプションでしょうか? – Josh

+0

私が知る限り、fileobserverクラスは、linuxのinotifyシステム上の単純な実装/ラッパーです。アンドロイドの他の多くのシステムコンポーネントがこれを使用しています。非常に大きなファイル/ディレクトリのセットにオブザーバーを置かない限り、使用するのが安全です。 – Viren

3

だけでサービスを停止し、変更を有効にするには、あなたのサービスを再起動する必要がなぜ再び

stopService(new Intent(this, ListenSMSservice.class)); 
startService(new Intent(this, ListenSMSservice.class)); 
関連する問題