2016-03-31 16 views
1

アプリケーションが終了しても(サービスが終了しても)、またはユーザーがアプリケーションを起動しなくても、サービスが実行されます。アプリケーションがインストールされた後にサービスを開始したいと思っています。この時点から、サービスは10分ごとに常に実行する必要があります。Androidサービスがevey 10分で常時稼働する必要があります

私はAndroidのプログラミングに新しいですような

など、いくつかのソリューションは、それらが私に作業していないいますが。 ソースコードのサンプルがある場合は、開発方法を教えてください。ここで

は、ここに私のサービスクラス..

public class MyService extends Service { 

    MyReceiver receiver = new MyReceiver(); 

    public void onCreate() 
    { 
     super.onCreate();  
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

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

    @Override   
    public void onStart(Intent intent, int startId) 
    { 
     receiver.SetAlarm(this); 
    } 

} 

は私のレシーバクラスです..です

public class MyReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     try { 
      PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); 
      PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, ""); 
      wl.acquire(); 

      // Put here YOUR code. 
      Toast.makeText(context, "Alarm !!!!!!!!!!", Toast.LENGTH_LONG).show(); // For example 

      wl.release(); 
     }catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    public void SetAlarm(Context context) 
    { 
     AlarmManager am =(AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
     Intent i = new Intent(context, UploadLocReceiver.class); 
     PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0); 
     am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * 60 * 10, pi); // Millisec * Second * Minute 
    } 

} 

私は、AndroidManifest.xmlファイルにサービスと受信機を追加しました。

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

<service android:name=".MyService" 
      android:exported="false" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </service> 

<receiver android:name=".MyReceiver" > 
      <intent-filter> 
       <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
      </intent-filter> 
     </receiver> 

私はメインアクティビティで以下のコードを追加しました。

Intent service = new Intent(getApplicationContext(), MyService.class); 
     this.startService(service); 

答えて

1

のAndroid OSが通知されます。

1.ユーザーがインストールされたアプリケーションれたことを通知します受信機でマニフェストファイル、追加:実行されます

<receiver android:name="com.mypackagename.Installreceiver" android:exported="true"> 
     <intent-filter> 
      <action android:name="com.android.vending.INSTALL_REFERRER" /> 
    </intent-filter> 
</receiver> 

2.スタートサービスがInstallreceiverから10分ごとを継続します放送受信機。

public class Installreceiver extends BroadcastReceiver{ 
     @Override 
     public void onReceive(Context context, Intent intent) { 
     context.startService(new Intent(context.getApplicationContext(), YourService.class)); 
     } 
    } 

YourService.java

public class YourService extends Service { 

    private static String TAG = "MyService"; 
    private Handler handler; 
    private Runnable runnable; 
    private final int runTime = 10000; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     Log.i(TAG, "onCreate"); 

     handler = new Handler(); 
     runnable = new Runnable() { 
      @Override 
      public void run() { 

       handler.postDelayed(runnable, runTime); 
      } 
     }; 
     handler.post(runnable); 
    } 

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

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
    } 

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

アップデート1:

3. OSは、あなたのサービスを殺すなら、あなたが他の受信機の操作を実行して再起動する必要があります。

サービスにおける二つの方法の下に追加します。

@Override 
public void onTaskRemoved(Intent rootIntent) { 
    super.onTaskRemoved(rootIntent); 
    sendBroadcast(new Intent("IWillStartAuto")); 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    sendBroadcast(new Intent("IWillStartAuto")); 
} 

4.manifest受信機を追加します。

<receiver android:name=".RestartServiceReceiver" > 
    <intent-filter> 
     <action android:name="IWillStartAuto" > 
     </action> 
     </intent-filter> 
</receiver> 

5.受信機追加:

public class RestartServiceReceiver extends BroadcastReceiver{ 
    @Override 
    public void onReceive(Context context, Intent intent) { 
    context.startService(new Intent(context.getApplicationContext(), YourService.class)); 
    } 
} 

をアップデート2:

マニフェストにパーミッションを追加します。

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

マニフェストに受信機を追加します。

<receiver android:name=".BootCompletedReceiver" > 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      <action android:name="android.intent.action.QUICKBOOT_POWERON" /> 
     </intent-filter> 
</receiver> 

BootCompletedReceiver、Javaの:これはあなたを助ける

public class BootCompletedReceiver extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent arg1) { 
    context.startService(new Intent(context.getApplicationContext(), YourService.class)); 
    } 
} 

希望。

+0

こんにちは@HirenPatel、私はあなたのコードに従った。ただし、アプリケーションを起動すると1回実行されます。アプリケーションを閉じる/終了すると、サービスは1回実行されます。それは10分ごとに実行されません。 MyServiceクラスの "OnStartCommand"メソッドにログメッセージを追加しようとしました。 – NML

+0

@NML、はい質問を共有してください –

+0

こんにちは@HirenPatel、私はあなたのコードに従った。ただし、アプリケーションを起動すると1回実行されます。アプリケーションを閉じる/終了すると、サービスは1回実行されます。それは10分ごとに実行されません。 MyServiceクラスの "OnStartCommand"メソッドにログメッセージを追加しようとしました。 – NML

0

あなたの質問には既に答えがあります。あなたがする必要があるのは、それらの回答を試すことだけです。 あなたがまだそれを作ることができない場合は、あなたのコードをここに投稿してください。スタックオーバーフローの仕組みです

FYI 10分間隔のAlarmManagerを使用:)あなたはアプリケーションのフォームPlayストアをインストールするときに

関連する問題