在Android中显示错误的默认应用程序列表L

问题描述:

我想要获取Android L中的所有默认应用程序。我使用了波纹管代码,但他们给了我一个错误的解决方案。让我先看看我的代码在Android中显示错误的默认应用程序列表L

private void getMyAppLauncherDefault() { 
    final IntentFilter filter = new IntentFilter(Intent.ACTION_MAIN); 
    filter.addCategory(Intent.CATEGORY_HOME); 
    List<IntentFilter> filters = new ArrayList<IntentFilter>(); 
    filters.add(filter); 
    List<ComponentName> activities = new ArrayList<ComponentName>(); 
    final PackageManager packageManager = (PackageManager) getPackageManager(); 

    packageManager.getPreferredActivities(filters, activities, null); 
    for (ComponentName activity : activities) { 

     Log.d(TAG,"======packet default:==="+activity.getPackageName()); 
    } 
} 

而这是日志。日志在com.google.android.googlequicksearchboxcom.vlingo.midas之间显示错误结果。他们都是语音应用程序,但我默认设置了com.google.android.googlequicksearchbox。我不知道为什么日志显示com.vlingo.midas。我该如何解决它?由于

16:02:44.817 /com.exam D/Sample: ======packet default:===com.sec.android.gallery3d 
16:02:44.827 /com.exam D/Sample: ======packet default:===com.android.mms 
16:02:44.827 /com.exam D/Sample: ======packet default:===com.android.mms 
16:02:44.827 /com.exam D/Sample: ======packet default:===com.vlingo.midas 
16:02:44.827 /com.exam D/Sample: ======packet default:===com.sec.android.app.sbrowser 
16:02:44.827 /com.exam D/Sample: ======packet default:===com.sec.android.gallery3d 
16:02:44.827 /com.exam D/Sample: ======packet default:===com.android.mms 
16:02:44.827 /com.exam D/Sample: ======packet default:===com.sec.android.app.launcher 
16:02:44.827 /com.exam D/Sample: ======packet default:===com.sec.android.app.sbrowser 
16:02:44.827 /com.exam D/Sample: ======packet default:===com.android.mms 
16:02:44.827 /com.exam D/Sample: ======packet default:===com.google.android.googlequicksearchbox 
16:02:44.827 /com.exam D/Sample: ======packet default:===com.sec.android.app.sbrowser 
16:02:44.827 /com.exam D/Sample: ======packet default:===com.sec.android.gallery3d 
16:02:44.827 /com.exam D/Sample: ======packet default:===com.android.mms 
16:02:44.827 /com.exam D/Sample: ======packet default:===com.google.android.apps.plus 

更新:有默认的应用程序名称 enter image description here

+0

'com.vlingo.midas'很可能支持一个额外的过滤器,为此它显示出来。用包名称打印相应的过滤器以检查这一点。 – F43nd1r

+0

@ F43nd1r:我们如何打印? “过滤器”大小只是1,而“过滤器”大小是4.但我无法打印过滤器的名称 – Jame

+0

可能是com.vlingo.midas是默认用于不同目的/应用程序。 –

要检查,如果你的应用程序设置为“默认”,那么请试试这个代码:

public static boolean isMyAppDefault(Context context) { 
     final IntentFilter filter = new IntentFilter(Intent.ACTION_MAIN); 
     filter.addCategory(Intent.CATEGORY_HOME); 

     List<IntentFilter> filters = new ArrayList<IntentFilter>(); 
     filters.add(filter); 

     final String myPackageName = context.getPackageName(); 
     List<ComponentName> activities = new ArrayList<ComponentName>(); 
     final PackageManager packageManager = (PackageManager) context.getPackageManager(); 

     packageManager.getPreferredActivities(filters, activities, null); 

     for (ComponentName activity : activities) { 
      if (myPackageName.equals(activity.getPackageName())) { 
       return true; 
      } 
     } 
     return false; 
    } 
+0

@ user8430如果您有任何问题,请告诉我。 –

+0

我认为你和我有同样的来源。在你的解决方案中,它与我上面的代码类似,只是修改了一些东西。发布前请检查您的解决方案。 – Jame

您在上面添加的代码是完全正确的。它确实表现了它的意义。

现在你已经设置com.google.android.googlequicksearchbox语音应用程序的默认,这就是为什么它显示在日志中了。 虽然com.vlingo.midas显示可能是因为它被设置为某种其他种类的类别而不是语音的默认值。

+0

你怎么证明它?我不这么认为。我检查所有 – Jame

+0

@ user8430我将需要尝试证明它。我会试试看,并让你知道 –

+0

你找到解决方案吗?我仍然期待着您的测试 – Jame