1

인 텐트 필터를 사용하여 설치된 모든 런처의 목록을 수집 할 수 있습니다. 문제는 앱 아이콘에 대한 int 참조를 가져 오는 것입니다. 아래의 코드는 NameNotFoundException 오류를 포착합니다.설치된 런처의 모든 앱 아이콘 목록을 가져 와서 원격보기의 각 아이콘을 표시합니다.

ApplicationInfo ai = pm.getApplicationInfo(lst.get(position).activityInfo.name, 0); 

합니까 activityInfo.name는 패키지 이름을 반환하지 :

public RemoteViews getViewAt(int position) { 
    PackageManager pm = mContext.getPackageManager(); 
    Intent i = new Intent("android.intent.action.MAIN"); 
    i.addCategory("android.intent.category.HOME"); 
    List<ResolveInfo> lst = pm.queryIntentActivities(i, 0); 


    RemoteViews rv = new RemoteViews(mContext.getPackageName(), R.layout.widget_item); 

    if(position < lst.size()) { 

     try { 
      ApplicationInfo ai = pm.getApplicationInfo(lst.get(position).activityInfo.name, 0); 
      int iconId = ai.icon; 
      rv.setInt(R.id.widget_item, "setBackgroundResource", iconId); 
     } catch (NameNotFoundException e) { 
      //Toast.makeText(mContext, "Fail: " + e, Toast.LENGTH_SHORT).show(); 
      Log.d("Error: ", e.toString()); 
     } 
    } 

문제는이 라인입니까?

답변

0

다음 변경 사항과 관련된 문제가 해결되었습니다.

대신이 같은 아이콘에있는 int 참조를 얻는 :

Drawable icon = lst.get(position).activityInfo.applicationInfo.loadIcon(pm); 

그때 아이콘을 변환 할 수 있었다 :

ApplicationInfo ai = pm.getApplicationInfo(lst.get(position).activityInfo.name, 0); 
int iconId = ai.icon; 

은 내가 그리기로 아이콘을 얻기 위해 다음 코드를 사용 그리기 가능에서 비트 맵으로 :

Bitmap iconBit = drawableToBitmap(icon); 

... 

public static Bitmap drawableToBitmap (Drawable drawable) { 
    if (drawable instanceof BitmapDrawable) { 
     return ((BitmapDrawable)drawable).getBitmap(); 
    } 

    Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Config.ARGB_8888); 
    Canvas canvas = new Canvas(bitmap); 
    drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); 
    drawable.draw(canvas); 

    return bitmap; 
} 

마지막으로 배경을 변경하려고하는 대신 이 같은 이미지 뷰의 소스 :이 다른 사람에게 도움이 희망

rv.setImageViewBitmap(R.id.widget_item, iconBit); 

:

rv.setInt(R.id.widget_item, "setBackgroundResource", iconId); 

나는 setImageViewBitmap을 사용했다. Drawable을 비트 맵으로 변환하기 위해 다음 게시물에서 Kabuko의 답변을 사용했습니다. How to convert a Drawable to a Bitmap?