web-dev-qa-db-ja.com

サービスのみを開始する方法Android app

バックグラウンドで実行し続けるservice(基本的にはプロキシサーバー)のみをコンポーネントとするアプリケーションを作成していますが、そのサービスを開始する方法を見つけることができません。アプリケーションはUIやユーザーとの対話ができないため、アクティビティを使用していません。
Broadcast receiver BOOTブロードキャストを聞くことができますが、インストール時に初めてサービスを開始するにはどうすればよいですか?または、アプリのインストール後に聞くことができるブロードキャストがありますか? TIME_TICKかもしれませんが、それは私が考える活動から登録されなければなりません。

46
Anurag Uniyal

残念ながら、アプリケーションのインストール後にブロードキャストイベントを受信する信頼できる方法はありません。 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));
            }
        }
    }
};

幸運を。

43
snctln

Return START_STICKY in Service.onStartCommand

Androidはサービスを再起動します

14
shaobin0604

私は同じ問題を研究しています。ここに私が見つけたものがあります: http://kfb-Android.blogspot.de/2009/04/registering-for-timetick-after-reboot.html

その簡単な小さなデモは、BroadcatReceiverServiceの間で少しピンポンをすることで解決策を示しています。受信側は、受信するマニフェストに登録することにより、ブート時に開始するように登録されますACTION_BOOT_COMPLETEDACTION_BOOT_COMPLETEDServiceBroadcastReceiverを登録し、次にACTION_TIME_TICK

アプリのロジックはBroadcastReceiverに実装されます。

0
jboi