首页 > 其他分享 >android UI界面更新之通知与服务结…

android UI界面更新之通知与服务结…

时间:2023-07-31 22:36:19浏览次数:45  
标签:界面 UI new import android intent public Intent


网上看到的,实际操作了下,例子代码如下。加深对BroadcastReceiver与Service理解

package org.yihu;
import android.app.Activity;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 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;
 import android.widget.TextView;public class UIDemoActivity  extends Activity {
     public static final int CMD_STOP_SERVICE = 0;
     Button btnStart;//开始服务Button对象应用
     Button btnStop;//停止服务Button对象应用
     TextView tv;//TextView对象应用
     DataReceiver dataReceiver;//BroadcastReceiver对象
     @Override
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);//设置显示的屏幕
      btnStart = (Button)findViewById(R.id.btnStart);
      btnStop = (Button)findViewById(R.id.btnStop);
      tv = (TextView)findViewById(R.id.tv);
     
      btnStart.setOnClickListener(new OnClickListener() {              
                 @Override
                 public void onClick(View v) {
                    
 //                        Intent myIntent = new Intent(Sample_3_6.this, MyService.class);
 //                        startService(myIntent);//发送Intent启动Service
                        
                         Intent intent = new Intent();
                        
                         intent.setAction("org.yihu.UIService");
                         startService(intent);
                 }
       });
      btnStop.setOnClickListener(new OnClickListener() {
                 @Override
                 public void onClick(View v) {
                         Intent myIntent = new Intent();//创建Intent对象
                         myIntent.setAction("org.yihu.cmdReceiver");
                         myIntent.putExtra("cmd", CMD_STOP_SERVICE);
                         sendBroadcast(myIntent);//发送广播
                 }
      });
  }       
  private class DataReceiver extends BroadcastReceiver{//继承自BroadcastReceiver的子类
         @Override
         public void onReceive(Context context, Intent intent) {
             double data = intent.getDoubleExtra("data", 0);
             tv.setText("Service的数据为:"+data);                       
         }               
  }
     @Override
     protected void onStart() {
         dataReceiver = new DataReceiver();
         IntentFilter filter = new IntentFilter();//创建IntentFilter对象
         filter.addAction("org.yihu.Sample_3_6");
         registerReceiver(dataReceiver, filter);//注册Broadcast Receiver
         super.onStart();
     }
     @Override
     protected void onStop() {
         unregisterReceiver(dataReceiver);//取消注册Broadcast Receiver
         super.onStop();
    }


package org.yihu;
import android.app.Service;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.os.IBinder;
 import android.util.Log;public class MyService extends Service{
     CommandReceiver cmdReceiver;
     boolean flag;
     @Override
     public void onCreate() {
      Log.v("Myservice", "onCreate()...");
         flag = true;
         cmdReceiver = new CommandReceiver();
         super.onCreate();
     }
     @Override
     public IBinder onBind(Intent intent) {
      Log.v("Myservice", "IBinder()...");
         return null;
     }
     @Override
     public int onStartCommand(Intent intent, int flags, int startId) {
      Log.v("Myservice", "onStartCommand()...");
      
         IntentFilter filter = new IntentFilter();
         filter.addAction("org.yihu.cmdReceiver");
         registerReceiver(cmdReceiver, filter);//注册Broadcast Receiver
        
         doJob();//调用方法启动线程
         return super.onStartCommand(intent, flags, startId);
     }
     //方法:
     public void doJob(){
         new Thread(){
             public void run(){
                 while(flag){
                     try{//睡眠一段时间
                             Thread.sleep(1000);
                     }
                     catch(Exception e){
                             e.printStackTrace();
                     }
                     Intent intent = new Intent();//创建Intent对象
                     intent.setAction("org.yihu.Sample_3_6");
                     intent.putExtra("data", Math.random());
                     sendBroadcast(intent);//发送广播
                 }                               
             }
                
         }.start();
     }       
     private class CommandReceiver extends BroadcastReceiver{
         @Override
         public void onReceive(Context context, Intent intent) {
             int cmd = intent.getIntExtra("cmd", -1);
             if(cmd == UIDemoActivity.CMD_STOP_SERVICE){//如果发来的消息是停止服务                               
                 flag = false;//停止线程
                 stopSelf();//停止服务
             }
         }               
     }
     @Override
     public void onDestroy() {//重写onDestroy方法
         this.unregisterReceiver(cmdReceiver);//取消注册的CommandReceiver
         super.onDestroy();
     }       }

mail.xml
<?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:orientation="vertical"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
     >
  <Button 
   android:id="@+id/btnStart"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:text="start service"
      />
  <Button 
   android:id="@+id/btnStop"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:text="stop service"
      />
  <TextView 
   android:id="@+id/tv"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      />
 </LinearLayout>
小结: android广播原理
1.定义BroadcastReceiver扩展类DataReceiver,实现onReceive方法.

 private class DataReceiver extends BroadcastReceiver{//继承自BroadcastReceiver的子类
         @Override
         public void onReceive(Context context, Intent intent) {
             double data = intent.getDoubleExtra("data", 0);
             tv.setText("Service的数据为:"+data);                       
         }               
  }2. 注册广播接收者。注意 "org.yihu.Sample_3_6"广播身份标识,接收时通过此来区分不同广播
       dataReceiver = new DataReceiver();
         IntentFilter filter = new IntentFilter();//创建IntentFilter对象
         filter.addAction("org.yihu.Sample_3_6");
        
3.发送广播. 
   Intent intent = new Intent();//创建Intent对象
     intent.setAction("org.yihu.Sample_3_6");
     intent.putExtra("data", Math.random());
     sendBroadcast(intent);//发送广播

4.广播不用后记得注销

   unregisterReceiver(dataReceiver);//取消注册Broadcast Receiver

标签:界面,UI,new,import,android,intent,public,Intent
From: https://blog.51cto.com/u_3124497/6914126

相关文章

  • android UI小知识点
    android小知识点4.如何在string.xml资源文件中定义变量第一步:定义string.xml资源文件<resourcesxmlns:android="http://schemas.android.com/apk/res/android"   <stringname="tipTitle">请设置</string> <stringname="test_fmt">\n\n"......
  • Android应用程序架构学习之一
    Android应用程序架构学习之一 核心类: MessagingController是一个线程控制类,通过put方法构造Command类放入队列依次执行Command类实现线程. 方法为command请求和MessageingListener实例提供服务 listener作为一个registeredlistener通过addListener()方法被增加 当......
  • android中使用startActivityForRes…
    网上找的一个通俗易懂,放在这以后好查阅假设:我这里有两个Activity:A和B,从A中向B中传递数据的时候采用的是Bundle封装数据,然后从A中跳转到B中,当B有需求将数据封装起来回传给A并跳转回A。那么A中接收数据时还要先判断Bundle是否为空,因为第一次访问A的时候(即B还没有回传的时候),Bundle......
  • Android SDK开发环境 配置
    AndroidSDK开发环境配置软件:Eclipse3.4,ADT-8.0.0,android-sdk_r08-windows下载地址:http://www.android123.com.cn/android_kit.html第一步运行android-sdk_r08-windows中SDKManager.exe下载安装相应版本SDK如android1.5,1.6,2.0,2.1,2.2,2.3在根目录/platforms中......
  • Android NIO学习之文件拷贝
    publicstaticlongforChannel(Filef1,Filef2)throwsException{longtime=newDate().getTime();intsize=2*1024;FileInputStreamin=newFileInputStream(f1);FileOutputStreamout=newFileOutputStream(f2);FileChannelinC=in.getChannel......
  • android 游戏开发 之索引贴
    1、Android游戏开发之旅(一)长按Button原理2、Android游戏开发之旅(二)View和SurfaceView3、Android游戏开发之旅(三)View类详解4、Android游戏开发之旅(四)Canvas和Paint实例5、Android游戏开发之旅(五)Path和Typeface6、Android游戏开发之旅(六)自定义View7、Android游戏开发之旅(七)......
  • Android上基于JSON的数据交互应用
    JSON的定义:一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案(有点类似于正则表达式,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换。JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为。–Json.org......
  • 自定义Android菜单背景
    publicclassMenuExextendsActivity{privatestaticfinalStringTAG="android123";@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout......
  • android网络通讯数据封装之 json
    Demo程序包括客户端和服务端客户端按json数据格式封装数据传至服务端。服务端为简单的servlet程序,负责接收客户端传到json数据,然后按原数据返回客户端.实例代码如下:publicstaticStringcmdLogIn(){StringurlString="http://192.168.8.75:89/webroot/jsontest";HttpPo......
  • android 检查手机是否安装该程序
    publicbooleancheckPrograme(StringpackName,StringactvityName){booleanflag=false;PackageManagermanager=getPackageManager();//只查找启动方式为LAUNCHER并且是ACTION_MAIN的APPIntentmainIntent=newIntent(Intent.ACTION_MA......