网站开发的工作内容,山东中佛龙建设有限公司网站,网站开发的实训内容,服务器建设网站软件1. BroadcastReceiver
1.1 知识点
#xff08;1#xff09;掌握广播接收器的主要作用及基本实现#xff1b;
#xff08;2#xff09;可以使用广播启动Service#xff1b;
#xff08;3#xff09;理解闹钟服务的使用#xff1b;
1.2 具体内容
广播这个名词大家…1. BroadcastReceiver
1.1 知识点
1掌握广播接收器的主要作用及基本实现
2可以使用广播启动Service
3理解闹钟服务的使用
1.2 具体内容
广播这个名词大家并不陌生就像电视信号一样打开电视都可以接受到信号。广播是一种发出后不管的机制不管接受者能否正常接受广播发送者只管发送。在android中经常使用到广播机制向各个应用程序发送消息。 通过这个图我们可以明白广播机制里面还是需要使用Activity程序如果说想要建立广播的话还必须准备一个广播接收器。
package com.example.broadcast;import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;public class MyBroadcastReceiver extends BroadcastReceiver {public MyBroadcastReceiver(){System.out.println(每次广播都会实例化一个新的广播组件进行操作);}Overridepublic void onReceive(Context context, Intent intent) {Toast.makeText(context, 广播已经启动, Toast.LENGTH_SHORT).show();//显示信息}}此时一个广播组件就定义好了那么定义好了之后我们需要在AndroidMainfest.xml进行注册。
receiverandroid:namecom.example.broadcast.MyBroadcastReceiverandroid:enabledtrue –启用广播intent-filter--匹配action操作是的广播action android:nameandroid.intent.action.EDIT/ /intent-filter/receiver现在发现广播配置中需要配置一个intent-filter节点表示此节点对一个指定的action操作的时候才会去启用广播。现在我们可以编写Activity程序进行广播的操作。现在通过按钮的事情启动广播。
LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:toolshttp://schemas.android.com/toolsandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:orientationverticalButtonandroid:idid/butandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:text开始广播//LinearLayout
现在的广播和服务一样都需要通过Activity程序去启动但是大家要记住一点广播可以根据系统的状态进行启动。 对于广播的注册也可以由程序完成。
package com.example.broadcast;import android.app.Activity;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;public class BroadcastActivity extends Activity {private Button but null;private MyBroadcastReceiver myBroadcastReceiver null;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);super.setContentView(R.layout.activity_broadcast);this.but (Button) super.findViewById(R.id.but);this.but.setOnClickListener(new OnClickListener() {Overridepublic void onClick(View v) {Intent it new Intent(www.wanczy.com);//启动Actionit.putExtra(msg, jjm是万策的职工);//start 通过程序去注册广播BroadcastActivity.this.myBroadcastReceiver new MyBroadcastReceiver();IntentFilter filter new IntentFilter(www.wanczy.com);BroadcastActivity.this.registerReceiver(BroadcastActivity.this.myBroadcastReceiver, filter);//end 以上就是广播在程序进行注册BroadcastActivity.this.sendBroadcast(it);//进行广播}});}}
以上的广播就是手工在程序进行注册的。
现在我们也可以对程序进行稍稍的修改因为现在不是针对所有的Action都进收听广播必须针对过滤的Action进行。
建议大家以后在开发中使用配置文件的形式进行配置。 package com.example.broadcast;import android.app.Service;
import android.content.Intent;
import android.os.IBinder;public class MyService extends Service {Overridepublic IBinder onBind(Intent intent) {return null;}Overridepublic void onCreate() {System.out.println(onCreate);super.onCreate();}Overridepublic void onDestroy() {System.out.println(onDestroy);super.onDestroy();}Overridepublic int onStartCommand(Intent intent, int flags, int startId) {System.out.println(onStartCommandintent);return Service.START_CONTINUATION_MASK;}}定义Bordcast
package com.example.broadcast;import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;public class MyBroadcastReceiver extends BroadcastReceiver {public MyBroadcastReceiver(){System.out.println(每次广播都会实例化一个新的广播组件进行操作);}Overridepublic void onReceive(Context context, Intent intent) {
// Toast.makeText(context, 广播已经启动,intent.getStringExtra(msg) , Toast.LENGTH_SHORT).show();//显示信息context.startService(new Intent(context,MyService.class));//启动Service}}对于广播来说并没有太多复杂的操作广播里面也可以不做任何的Action的过滤。我们现在对于服务来说Activity可以启动广播也可以启动但是广播是可以在耨写特定的条件下启动服务的。例如手机开机的时候或者一些特定的应用程序运行的时候才会去启动服务。
范例设置闹钟 定义一个闹钟的提示类
package com.example.alarmproject;import java.text.SimpleDateFormat;
import java.util.Date;import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;public class AlarmMessage extends Activity {Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);new AlertDialog.Builder(this).setIcon(R.drawable.logo).setTitle(闹钟时间已到).setMessage(闹钟响起现在时间是new SimpleDateFormat(yyyy-MM-dd HH:mm:ss).format(new Date(System.currentTimeMillis()))).setPositiveButton(关闭, new DialogInterface.OnClickListener() {Overridepublic void onClick(DialogInterface dialog, int which) {AlarmMessage.this.finish();}}).show();}
}
package com.example.alarmproject;import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;public class MyAlarmReceive extends BroadcastReceiver {Overridepublic void onReceive(Context context, Intent intent) {Intent it new Intent(context,AlarmMessage.class);it.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//传递一个新的任务标记context.startActivity(it);//启动Intent}}现在打开这个对话框的操作肯定是需要广播。
LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:toolshttp://schemas.android.com/toolsandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:orientationverticalandroid:gravitycenter_horizontalTimePicker android:idid/timeandroid:layout_widthmatch_parentandroid:layout_heightwrap_content/TextViewandroid:idid/msgandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:text当前没有设置闹钟 /Buttonandroid:idid/setandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:text设置闹钟 /Buttonandroid:idid/deleteandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:text删除闹钟 /
/LinearLayout
通过定义的时间选择器选择时间设置闹钟。
package com.example.alarmproject;import java.util.Calendar;import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.TimePicker.OnTimeChangedListener;
import android.widget.Toast;public class MyAlarmManagerActivity extends Activity {private AlarmManager alarm null;private Button set null;private Button delete null;private TextView msg null;private TimePicker time null;private Calendar calendar Calendar.getInstance();// 取得日历操作类private int hourOfDay 0;// 保存我们设置的小时数private int minute 0;// 保存分钟Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);super.setContentView(R.layout.activity_my_alarm_manager);this.time (TimePicker) super.findViewById(R.id.time);this.set (Button) super.findViewById(R.id.set);this.delete (Button) super.findViewById(R.id.delete);this.msg (TextView) super.findViewById(R.id.msg);this.alarm (AlarmManager) super.getSystemService(Context.ALARM_SERVICE);// 取得闹钟服务this.time.setOnTimeChangedListener(new OnTimeChangedListenerImpl());this.set.setOnClickListener(new SetOnClickListenerImpl());this.delete.setOnClickListener(new DeleteOnClickListenerImpl());this.time.setIs24HourView(true);// 设置24小时制}private class OnTimeChangedListenerImpl implements OnTimeChangedListener {Overridepublic void onTimeChanged(TimePicker view, int hourOfDay, int minute) {MyAlarmManagerActivity.this.calendar.setTimeInMillis(System.currentTimeMillis());// 设置当前时间MyAlarmManagerActivity.this.calendar.set(Calendar.HOUR_OF_DAY,hourOfDay);MyAlarmManagerActivity.this.calendar.set(Calendar.MINUTE, minute);MyAlarmManagerActivity.this.calendar.set(Calendar.SECOND, 0);MyAlarmManagerActivity.this.calendar.set(Calendar.MILLISECOND, 0);MyAlarmManagerActivity.this.hourOfDay hourOfDay;MyAlarmManagerActivity.this.minute minute;}}private class SetOnClickListenerImpl implements OnClickListener {public void onClick(View v) {Intent intent new Intent(MyAlarmManagerActivity.this,MyAlarmReceive.class);intent.setAction(www.wanczy.com);PendingIntent sender PendingIntent.getBroadcast(MyAlarmManagerActivity.this, 0, intent,PendingIntent.FLAG_UPDATE_CURRENT);// 指定PendingIntentMyAlarmManagerActivity.this.alarm.set(AlarmManager.RTC_WAKEUP,MyAlarmManagerActivity.this.calendar.getTimeInMillis(),sender);MyAlarmManagerActivity.this.msg.setText(闹钟响起的时间是 MyAlarmManagerActivity.this.hourOfDay 时 MyAlarmManagerActivity.this.minute 分);Toast.makeText(MyAlarmManagerActivity.this, 设置闹钟成功,Toast.LENGTH_SHORT).show();}}private class DeleteOnClickListenerImpl implements OnClickListener {public void onClick(View v) {if (null ! MyAlarmManagerActivity.this.alarm) {// 只有闹钟设置之后才能取消设置Intent intent new Intent(MyAlarmManagerActivity.this,MyAlarmReceive.class);PendingIntent sender PendingIntent.getBroadcast(MyAlarmManagerActivity.this, 0, intent,PendingIntent.FLAG_UPDATE_CURRENT);MyAlarmManagerActivity.this.alarm.cancel(sender);//取消闹钟MyAlarmManagerActivity.this.msg.setText(当前没有设置闹钟);Toast.makeText(MyAlarmManagerActivity.this, 闹钟删除成功,Toast.LENGTH_SHORT).show();}}}
} receiverandroid:namecom.example.alarmproject.MyAlarmReceiveandroid:enabledtrueandroid:process:remote—开辟一个新的进程intent-filteraction android:namewww.wanczy.com//intent-filter /receiver1.3 小结
1广播属于触发式操作当有了指定操作之后会自动启动广播
2通过广播可以实现Service程序的启动