2

常にバックグラウンドで実行され、電話を起動して定期的にメッセージを送信するとすぐに開始されるサービスをAndroidで作成したい.私は以下のようにコードを書いた.

MainActivity.class

 package test.sai;



 public class MainActivity extends Activity {

Timer t;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    alrm();
    Log.e("msg", "in main");


}






public  void alrm() {
    Intent myAlarm = new Intent(getApplicationContext(), AlarmReceiver.class);
    Log.e("msg", "in alrm");
    //myAlarm.putExtra("project_id", project_id); //Put Extra if needed
    PendingIntent recurringAlarm =      v     PendingIntent.getBroadcast(getApplicationContext(), 0, myAlarm, PendingIntent.FLAG_UPDATE_CURRENT);
    AlarmManager alarms = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
    Calendar updateTime = Calendar.getInstance();
    Log.e("msg", "in alrm1");
    //updateTime.setWhatever(0);
    alarms.setInexactRepeating(AlarmManager.RTC_WAKEUP,        updateTime.getTimeInMillis(), AlarmManager.INTERVAL_FIFTEEN_MINUTES, recurringAlarm); //you can modify the interval of course

}




}

このクラスは AlarmReceiver.class を呼び出しています

package test.sai;



 public class AlarmReceiver extends BroadcastReceiver 
 {  
GPSTracker gps;

@Override
public void onReceive(Context context, Intent intent) 
{
    gps = new GPSTracker(context);

    if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {  
           Intent pushIntent = new Intent(context,MainActivity.class); 
           pushIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
           context.startActivity(pushIntent);



           Log.e("pro", "alrmmanager");
           }

    Intent myService = new Intent(context, FirstService.class);
    myService.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startService(myService);
    Log.e("msg", "in alrmmanager1");





}

 }  

最後に、AlarmReceiver がサービス クラスを呼び出しています。

 package test.sai;



 public class FirstService extends Service{

Timer t;
int time = 0;

@Override
public IBinder onBind(Intent arg0) {


    // TODO Auto-generated method stub
    return null;
}
@Override
public void onStart(Intent intent, int startId) {


    Log.e("time", time++ +"");
    Toast.makeText(this, time+1+"", 500).show();





}
@Override
public void onDestroy() {
    // TODO Auto-generated method stub
    super.onDestroy();

}

}

サービスが開始されたらすぐに GPS を使用したいのですが、GPS を使用して携帯電話の位置を追跡し、別の携帯電話にメッセージを送信したいと考えています。これらのメソッドを呼び出して、サービスが実行され続け、特定の間隔でメッセージが送信されるようにします。助けてください。

4

3 に答える 3

0

これには alarmManager を使用できます...独自の timerTask を作成すると、プロセッサによって破壊される可能性が非常に高いためです。

于 2013-07-20T10:20:21.167 に答える
0

を登録して、定期的にインテントを受信して​​みてBroadcastReceiverくださいAlarmManager。1 つはアクションをリッスンするもの、もう 1 つBOOT_COMPLETEDは AlarmManager が間隔を置いて開始するものです。やりたいことの実行に時間がかかる場合は、2 番目の受信者にサービスを開始させることができます。

他のレシーバーを AlarmManager に登録できるように、ブート時にレシーバーを実行する方法に関する質問は次のとおりです。 Android BroadcastReceiver on startup

これは、SMS を除いて、ほとんど同じことを望んでいる別の例です: How to Autostart an AlarmManager to start a Scheduled Activity?

于 2013-07-20T10:38:40.183 に答える