zoukankan      html  css  js  c++  java
  • TabActivity 切换到后台 回到当前运行的桌面

    一般Activity中监听返回键,都是重写onKeyDown(int keyCode, KeyEvent event)方法对手机按键进行监听,

    而当要监听的Activity为TabActivity时(其实ListActivity也一样),这个方法并不起作用。

    下面是解决办法:

    正在开发的应用的首页是一个TabActivity,当用户按下返回键时会退出程序,想退出到后台看home键,还不是销毁。

    • 常规方法像上文说的重写onKeyDown(int keyCode, KeyEvent event),根本不起作用;
    • 又发现SDK2.0以后新增了一个专门针对返回键的方法onBackPressed(),还是不起作用。

    现有一个dispatchKeyEvent(KeyEvent event)果然管用

     1 public boolean dispatchKeyEvent(KeyEvent event) {
     2         if (event.getAction() == KeyEvent.ACTION_DOWN
     3                 && event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
     4             ResolveInfo launcherResolve=queryCurrentLauncher();
     5             Intent intent=new Intent();
     6             intent.addCategory(Intent.ACTION_MAIN);
     7             ComponentName componentName=new ComponentName(launcherResolve.activityInfo.packageName,launcherResolve.activityInfo.name);
     8             intent.setComponent(componentName);
     9             startActivitySafely(intent);
    10         }
    11         return super.dispatchKeyEvent(event);
    12     }
    13     private void startActivitySafely(Intent intent){
    14         try{
    15             startActivity(intent);
    16             Toast.makeText(this, "切换到后台成功", Toast.LENGTH_SHORT).show();
    17         }catch (Exception e){
    18             Toast.makeText(this, "切换到后台失败", Toast.LENGTH_SHORT).show();
    19             e.printStackTrace();
    20         }
    21     }
    22 
    23     private ResolveInfo queryCurrentLauncher() {
    24         Intent launcherIntent = new Intent(Intent.ACTION_MAIN);
    25         launcherIntent.addCategory(Intent.CATEGORY_HOME);
    26         launcherIntent.addCategory(Intent.CATEGORY_DEFAULT);
    27         List<ResolveInfo> launcherInfoList = getPackageManager().queryIntentActivities(launcherIntent, PackageManager.MATCH_DEFAULT_ONLY);
    28 
    29         ResolveInfo launcherResolveInfo = null;
    30         ActivityManager activityManager = (ActivityManager) getSystemService(Service.ACTIVITY_SERVICE);
    31         List<ActivityManager.RunningTaskInfo> tasks = activityManager.getRunningTasks(30);
    32         Iterator<ActivityManager.RunningTaskInfo> itInfo = tasks.iterator();
    33         while (itInfo.hasNext()) {
    34             ActivityManager.RunningTaskInfo info = itInfo.next();
    35             for (ResolveInfo resolveInfo : launcherInfoList) {
    36                 String name1 = info.topActivity.getClassName();
    37                 String namme2 = resolveInfo.activityInfo.name;
    38                 if (name1.equals(namme2)) {
    39                     //获取当前使用的桌面
    40                     launcherResolveInfo = resolveInfo;
    41                     return launcherResolveInfo;42                 }
    43             }
    44         }
    45         return launcherResolveInfo;
    46     }


    //这段代码的功能:在TabActivity下实现切换到后台,回到当前用户使用的桌面,而不是弹出选择框让用户选择,也不是回到固定的桌面,下次启动的时候直接回到之前的界面,从而避免每次打开都会重新开始
  • 相关阅读:
    【矩阵乘】【DP】【codevs 1305】Freda的道路
    Giraph源代码分析(九)—— Aggregators 原理解析
    Dubbo框架应用之(三)--Zookeeper注冊中心、管理控制台的安装及解说
    Oracle中对数字加汉字的排序(完好)
    PKU-2104-K-th Number
    IE下推断IE版本号的语句
    自己定义View时,用到Paint Canvas的一些温故,简单的帧动画(动画一 ,&quot;掏粪男孩Gif&quot;顺便再提提onWindowFocusChanged)
    <html>
    测试一个网段主机在线情况,禁ping的情况除外
    glance image-create --name "wj_js_company_img" --file a0e1c7fa-d6d3-410f-9bb5-e699e342db91 --disk-format qcow2 --container-format bare --progress --visibility public
  • 原文地址:https://www.cnblogs.com/xushihai/p/4818387.html
Copyright © 2011-2022 走看看