您当前的位置: 首页 >  android

寒冰屋

暂无认证

  • 0浏览

    0关注

    2286博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Android服务

寒冰屋 发布时间:2019-03-17 16:36:14 ,浏览量:0

目录

介绍

背景

使用代码

1.在MainActivity中获取用户的时间间隔

a)MainActivity.class

b)main_activity.xml

2.根据间隔设置报警管理器

3. BroadcastReceivers的实现

4.服务类的注册

参考

介绍

几乎在所有平台上,有许多进程运行在后台,它们被称为服务。可能在Android平台中,有一些服务可以执行长时间运行的操作,这些操作在处理过程中不需要用户交互。

在本文中,借助预定义的Android Alarm Service,我们将创建一个应用程序,在所需的时间间隔内将电话模式更改为振动模式。除此之外,我们将编写自己的Service类并在特定时间调用它。此外,此演示应用程序将回答以下问题:

  • 如何使用Alarm Manager?
  • 如何通过Alarm Manager启动Intent?
  • 如何使用BroadcastReceiver?
  • 如何使用服务?
  • 如何在AndroidManifest.xml中注册服务和接收器?
  • 如何更改手机铃声模式?
背景

要理解本文,读者应该了解Java和Android平台。

使用代码

在开始编码之前,应用程序的结构应该在程序员的脑海中清晰明。对于此演示应用程序,我们可以按照以下简单步骤操作:

  1. 获取用户的时间间隔 MainActivity
  2. 根据时间间隔,设置Alarm广播它
  3. 写入BroadcastReceivers以接收警报并执行操作或呼叫服务。

在这个演示中,有4个类:

MainActivity             // main class
FromHourAlarmReceiver    //BroadcastReceiver
ToHourAlarmReceiver      //BroadcastReceiver
MyService                //Service Class
1.在MainActivity中获取用户的时间间隔 a)MainActivity.class
public class MainActivity extends Activity {

 private EditText editText1;    //create the objects
 private EditText editText2;
 private Button btn1;
 private int hourFrom;
 private int hourTo;
             
       @Override
       protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
         
          editText1 = (EditText) findViewById(R.id.editText1); //bind the object
          editText2 = (EditText) findViewById(R.id.editText2);
          btn1 = (Button) findViewById(R.id.btn1);
                      
          btn1.setOnClickListener(new OnClickListener() { //click listener for btn
                
                 @Override
                 public void onClick(View v) {
          });
       }
 
       @Override
       public boolean onCreateOptionsMenu(Menu menu) {
          // Inflate the menu; this adds items to the action bar if it is present.
          getMenuInflater().inflate(R.menu.main, menu);
          return true;
       } 
}
b)main_activity.xml

    
    
    
    
    
    
 
2.根据间隔设置报警管理器

在创建Alarm Manager之前,我们需要创建我们的意图来通过AlarmManager调用它们:

Intent intent1 = new Intent(getBaseContext(), FromHourAlarmReceiver.class);
final PendingIntent sender1 = PendingIntent.getBroadcast
               (this, 192837, intent1, PendingIntent.FLAG_UPDATE_CURRENT);

Intent intent2 = new Intent(getBaseContext(), ToHourAlarmReceiver.class);
final PendingIntent sender2 = PendingIntent.getBroadcast
               (this, 192837, intent2, PendingIntent.FLAG_UPDATE_CURRENT);

在这里,Intent是要执行的操作的名称。由于我们将调用一个类,FromHourAlarmReceiver,该类需要知道发生了什么,为什么调用它,谁是调用者等。因此,我们需要通过Intent对象[1] 发送上下文。

这里有另一个术语PendingIntent,这有两点重要。第一个表明我们写的意图将在稍后开始。第二个是通过使用PendingIntent,告诉Android平台我们正在与第三方应用程序或Android平台上的服务通信。在这个演示中,那就是AlarmManager服务。(有关详细信息,请查看http://developer.android.com/reference/android/app/PendingIntent.html。)

我们创建了两个意图,因为我们将设置2个警报,第一个将手机状态更改为振动模式,另一个将其更改为正常模式。所以我们需要2个calendar对象来设置时间。

Calendar cal1 = Calendar.getInstance();
cal1.set(Calendar.HOUR,hourFrom);
                                  
Calendar cal2 = Calendar.getInstance();
cal2.set(Calendar.HOUR,hourTo);

在我们拥有所有设置警报的对象和信息之后:

AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);am.set(AlarmManager.RTC_WAKEUP,
cal1.getTimeInMillis(), sender1);am.set(AlarmManager.RTC_WAKEUP,
cal2.getTimeInMillis(), sender2);

最后我们的MainActivity将看起来像这样:

public class MainActivity extends Activity {

 private EditText editText1;
 private EditText editText2;
 private Button btn1;
 private int hourFrom;
 private int hourTo;
             
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
     
      editText1 = (EditText) findViewById(R.id.editText1);
      editText2 = (EditText) findViewById(R.id.editText2);
      btn1 = (Button) findViewById(R.id.btn1);
     
       Intent intent1 = new Intent(getBaseContext(), FromHourAlarmReceiver.class);
       final PendingIntent sender1 = PendingIntent.getBroadcast(
         this, 192837, intent1, PendingIntent.FLAG_UPDATE_CURRENT);
       
       Intent intent2 = new Intent(getBaseContext(), ToHourAlarmReceiver.class);
       final PendingIntent sender2 = PendingIntent.getBroadcast(
         this, 192837, intent2, PendingIntent.FLAG_UPDATE_CURRENT);
     
      btn1.setOnClickListener(new OnClickListener() {
            
             @Override
             public void onClick(View v) {
                  
             try{
                   hourFrom = Integer.parseInt(editText1.getText().toString());
                   hourTo = Integer.parseInt(editText2.getText().toString());
             } catch(Exception e){}
                   if((0            
关注
打赏
1665926880
查看更多评论
0.0484s