zoukankan      html  css  js  c++  java
  • 开发Android小应用——短信控制的浮动窗

    一、学到的知识:

     1.服务的启动和停止;
     a.Context.startService()
      启动流程:startService() -> onCreate() -> onStart()
      停止流程:stopService(0 -> onDestory()
      如果调用者直接退出而没有stopService,则Service会一直在后台运行;
     b.Context.bindService()
      启动流程:bindService() -> onCreate() -> onBind()
      调用者退出后,Service就会unbindService() -> onUnbind() -> onDestory()
      
     2.通过将view加入到WindowManager让view一直在屏幕上显示;
     首先要在AndroidManifest.xml中加入权限:

    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>


        a.先定义一个View  

      View view = LayoutInflater.from(this).inflate(R.layout.floating, null);  


        b.获取WindowManager

       WindowManager wm;
       wm = (WindowManager) this.getSystemService(WINDOW_SERVICE);


        c.设置参数  

       WindowManager.LayoutParams wmParams;
       wmParams = new LayoutParams(LayoutParams.WRAP_CONTENT,  
                   LayoutParams.WRAP_CONTENT, LayoutParams.TYPE_SYSTEM_ERROR,  
                   LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSPARENT);  
       wmParams.gravity = Gravity.LEFT | Gravity.TOP;


        d.将View加入到WindowManager中。     

      wm.addView(view, wmParams);

       e.如果要去掉,只需要从WindowManager中remove。    

      wm.removeView(view);        

     3.通过bindService方法来启动service,使用ServiceConnection实现于Service的通信;
     
     4.通过BroadcastReceiver监听短消息;
     a.在AndroidManifest.xml中加入权限;

    <uses-permission android:name="android.permission.RECEIVE_SMS"/>


     b.事件的动态注册与取消;

     registerReceiver(BroadcastReceiver receiver, IntentFilter filter);
     unregisterReceiver(BroadcastReceiver receiver);

     
     5.利用ActivityManager获取应用程序信息;

     ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
     List<RecentTaskInfo> recentTask = am.getRecentTasks(64, 0);
     PackageManager pm = getPackageManager();
     Intent intent = recentTask.get(0).baseIntent;    
     ResolveInfo resolveInfo = pm.resolveActivity(intent, 0);  
     String appName = resolveInfo.loadLabel(pm).toString();

    二、程序主要文件及其功能

     FloatingSmileActivity类:控制服务的开关
     主要功能: 两个按钮,控制FloatingObj service的开关。

     Floating service类文件:主要服务的文件

     主要功能:
     1.启动后有图片自由移动;
     2.根据从指定号码收到的短信息来控制当前的状态。
         a.收到包含“dismiss”消息后,点击图片,图片消失(默认的状态)。
     只有进入应用再次点击“开”才能再次出现。
         b.收到包含“burst”消息后,点击图片,产生burst效果。
         c.收到包含“smile”消息后,点击图片,产生smile效果。
         d.收到包含”learning“消息后,点击图片,会清除以前的关联信息,重新关联到最近启动的程序,下次点击图片就会直接启动这个程序。
          e.收到包含“learned”消息后,点击图片,会启动上次关联到的程序,如果没有关联,则先关联到要一个。
     3.控制Effect服务。根据当前的状态发送相应消息到Effect服务,使之产生相应效果。

     Effect service类:产生效果的服务;

    当前有两个功能:
     1.收到burst消息后,产生burst效果,默认3秒后自动清除;
     2.收到smile消息后,产生smile效果,默认5秒后自动清除;
     
     遇到的问题:
     1.本来打算用AnimationDrawable类来实现动画效果,但是得到的还是静态图,没有动画效果。

    三、 ubuntu中模拟器下发送短信方法
     1.启动模拟器,查看端口号,标题栏显示,一般都是5554;
     2.终端下连接模拟器:telnet localhost 5554
     3.模拟发送短信,如 sms send 123 smile
        其中,123为模拟发送的手机号

    工程代码已上传至:http://download.csdn.net/detail/arcticant/4773369

    参考资料:

        Android中加入悬浮窗

        Android的短信接收处理----Broadcast和Receiver的使用

        Activity与Service通信

        Android中TASK和PROCESS的区别,获取最近运行的程序和正在运行的进程




  • 相关阅读:
    Life Forms POJ
    Maximum repetition substring POJ
    Extend to Palindrome UVA
    Sequence POJ
    HDU-6705 path (bfs)
    632C. The Smallest String Concatenation(注意 :stl sort函数坑点--- coredump问题 )
    2018 ICPC青岛网络赛 B. Red Black Tree(倍增lca)
    基于哈希表实现页面置换算法
    解决xpath中文乱码
    解决oh-my-zsh中git分支显示乱码问题
  • 原文地址:https://www.cnblogs.com/arcticant/p/2909084.html
Copyright © 2011-2022 走看看