2017-09-09 7 views
1

에서 앱 적응 아이콘을 가져옵니다. 앱 적응 형 아이콘을 검색하려면 어떻게해야합니까? 고맙습니다.안드로이드 내가이 줄 때문에 적응 아이콘의 나에게 빈 아이콘을 반환,이</p> <pre><code>resolveInfo.activityInfo.loadIcon(packageManager) </code></pre> <p>처럼하지만 안드로이드 8.0 오레오에서 응용 프로그램의 실행 아이콘을 얻고 패키지 관리자

+0

아이디어가 있습니까? – ithink

답변

0

이 클래스를 사용하여 adaptiveIcon에서 비트 맵을 가져올 수 있습니다.

public static class AppIconHelperV26 { 

    @RequiresApi(api = Build.VERSION_CODES.O) 
    public static Bitmap getAppIcon(PackageManager mPackageManager, String packageName) { 

     try { 
      Drawable drawable = mPackageManager.getApplicationIcon(packageName); 

      if (drawable instanceof BitmapDrawable) { 
       return ((BitmapDrawable) drawable).getBitmap(); 
      } else if (drawable instanceof AdaptiveIconDrawable) { 
       Drawable backgroundDr = ((AdaptiveIconDrawable) drawable).getBackground(); 
       Drawable foregroundDr = ((AdaptiveIconDrawable) drawable).getForeground(); 

       Drawable[] drr = new Drawable[2]; 
       drr[0] = backgroundDr; 
       drr[1] = foregroundDr; 

       LayerDrawable layerDrawable = new LayerDrawable(drr); 

       int width = layerDrawable.getIntrinsicWidth(); 
       int height = layerDrawable.getIntrinsicHeight(); 

       Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 

       Canvas canvas = new Canvas(bitmap); 

       layerDrawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); 
       layerDrawable.draw(canvas); 

       return bitmap; 
      } 
     } catch (PackageManager.NameNotFoundException e) { 
      e.printStackTrace(); 
     } 

     return null; 
    } 
} 
+0

SDK 도구의 마지막 버전이 SDK 관리자에 있습니다. 하지만 AdaptiveIconDrawable 클래스가 해결되지 않습니다 – ithink

+0

당신의 gradle에서 26으로 변경하려면 compilesdkversion –

+0

고마워요, 작동 :) – ithink