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 来跟踪手机的位置并向另一部手机发送消息。我也有 GPS 和短信发送的代码,但我不知道如何打电话和在哪里打电话调用这些方法,以便我的服务继续运行并以特定的时间间隔发送消息。请帮助。

4

3 回答 3

0

尝试注册一个BroadcastReceiverwithAlarmManager以定期接收意图。您可能需要两个,一个用于侦听BOOT_COMPLETED操作,另一个用于 AlarmManager 将按间隔启动。如果您想做的任何事情都需要一段时间才能执行,您可以让第二个接收器启动服务。

这是一个关于如何使接收器在启动时运行的问题,以便您可以使用 AlarmManager 注册另一个接收器: Android BroadcastReceiver on startup

这是另一个与您想要的几乎相同的东西,减去 SMS: 如何自动启动 AlarmManager 以启动计划的活动?

于 2013-07-20T10:38:40.183 回答
0

要回答您的两部分问题:

首先你需要学习如何在 Android Framework 中处理 onBoot。请参阅此 Q/A Trying to start a service on boot on Android

最后,您需要了解 SMSManager 类。请参阅文档http://developer.android.com/reference/android/telephony/SmsManager.html

我认为任何人都不应该为您的请求提供完整的代码,因为您的主要问题/问题是“我怎样才能帮助自己并停止寻找其他人来解决我的所有问题”。

于 2013-07-20T10:32:18.383 回答
0

您可以为此使用alarmManager ...因为如果您创建自己的timerTask,它很容易被处理器破坏。

于 2013-07-20T10:20:21.167 回答