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下实现切换到后台,回到当前用户使用的桌面,而不是弹出选择框让用户选择,也不是回到固定的桌面,下次启动的时候直接回到之前的界面,从而避免每次打开都会重新开始

 

posted @ 2015-09-18 10:02  LinuxCC  阅读(415)  评论(0编辑  收藏  举报