バックグラウンドで実行し続けるservice
(基本的にはプロキシサーバー)のみをコンポーネントとするアプリケーションを作成していますが、そのサービスを開始する方法を見つけることができません。アプリケーションはUIやユーザーとの対話ができないため、アクティビティを使用していません。Broadcast receiver
BOOTブロードキャストを聞くことができますが、インストール時に初めてサービスを開始するにはどうすればよいですか?または、アプリのインストール後に聞くことができるブロードキャストがありますか? TIME_TICKかもしれませんが、それは私が考える活動から登録されなければなりません。
残念ながら、アプリケーションのインストール後にブロードキャストイベントを受信する信頼できる方法はありません。 ACTION_PACKAGE_ADDED インテントは新しくインストールされたパッケージにブロードキャストしません。
ACTION_BOOT_COMPLETED イベントを受信するには、ブロードキャストレシーバークラスとサービスが必要です。 ACTION_USER_PRESENT を追加することもお勧めします。そのブロードキャストレシーバーによってキャッチされるインテント。これにはAndroid 1.5(minSDK = 3)が必要です。簡単に自動的にシャットダウンせずにサービスを実行し続けるために最後にできることは、サービスonCreateで Service.setForeground() を呼び出してAndroidに通知することです。サービスを停止しないでください。これは主に、実行を続けなければならないが、どのサービスでも使用できるmp3プレーヤータイプのサービス用に追加されました。
マニフェストのboot_completeイベントとuser_presentイベントに適切な権限を追加してください。
以下は、イベントのブロードキャストレシーバーとして使用できる単純なクラスです。
package com.snctln.util.WeatherStatus;
import Android.content.BroadcastReceiver;
import Android.content.Context;
import Android.content.Intent;
public class WeatherStatusServiceReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
if(intent.getAction() != null)
{
if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED) ||
intent.getAction().equals(Intent.ACTION_USER_PRESENT))
{
context.startService(new Intent(context, WeatherStatusService.class));
}
}
}
};
幸運を。
Return START_STICKY
in Service.onStartCommand
Androidはサービスを再起動します
私は同じ問題を研究しています。ここに私が見つけたものがあります: http://kfb-Android.blogspot.de/2009/04/registering-for-timetick-after-reboot.html
その簡単な小さなデモは、BroadcatReceiver
とService
の間で少しピンポンをすることで解決策を示しています。受信側は、受信するマニフェストに登録することにより、ブート時に開始するように登録されますACTION_BOOT_COMPLETED
。 ACTION_BOOT_COMPLETED
。 Service
はBroadcastReceiver
を登録し、次にACTION_TIME_TICK
。
アプリのロジックはBroadcastReceiver
に実装されます。