android中的一项服务,定期发送短信

时间:2013-07-20 10:16:24

标签: android service

我想在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和短信发送的代码但是我没有得到如何调用以及在哪里调用这些方法,以便我的服务继续运行并以某种特定的间隔发送消息。请帮助。

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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

我认为没有人应该为您的请求提供完整的代码,因为您的主要问题是“如何帮助自己并停止寻找其他人解决我的所有问题”。

答案 2 :(得分:0)

尝试使用BroadcastReceiver注册AlarmManager以定期接收意图。您可能需要两个,一个用于侦听BOOT_COMPLETED操作,另一个用于AlarmManager将按间隔启动。你可以让第二个接收器启动一个服务,如果你想做什么需要一段时间来执行。

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

这是另一个想要你想要的东西,除了短信: How to Autostart an AlarmManager to start a Scheduled Activity?