2014-10-24 3 views
-1

나는 앱에 locker.but을 개발하려고 노력 중이므로 사용자에게 기기에 설치된 모든 앱의 목록을 보여줄 필요가 있습니다. 처음에는 사용자가 설치된 모든 응용 프로그램을 보여줄 수 있었지만 카메라, 다이얼러, 메시징 등과 같은 시스템 응용 프로그램은 표시하지 않았습니다. 코드를 수정할 때 모든 응용 프로그램에서 모든 것을 보여줄 수 있었지만이 방법도 역시 공개했습니다. 많은 정보는 모든 com.android 패키지, 실행기 패키지 등을 보여 주므로 시스템 응용 프로그램을 무시하면서 연락처, 다이얼러 및 기타 응용 프로그램과 같은 시스템 응용 프로그램을 필터링하고 표시하는 방법이 있습니까? 또한이 목록을 어떻게 정렬합니까? 알파벳 순서? 미리 감사드립니다 :)안드로이드에 설치된 Particuar 앱만 표시하기

public class ApkList extends Fragment implements OnItemClickListener { 
PackageManager packageManager; 
ListView apkList; 

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    View rootView = inflater.inflate(R.layout.app_list, container, false); 
    return rootView; 
} 

@Override 
public void onStart() { 
    // TODO Auto-generated method stub 
    super.onStart(); 
    packageManager = getActivity().getPackageManager(); 
    List<PackageInfo> packageList = packageManager 
      .getInstalledPackages(PackageManager.GET_PERMISSIONS); 

    List<PackageInfo> packageList1 = new ArrayList<PackageInfo>(); 

    /* To filter out System apps */ 
    for (PackageInfo pi : packageList) { 
     //boolean b = isSystemPackage(pi); 
     //if (!b) { 
      packageList1.add(pi); 
     //} 
    } 
    apkList = (ListView) getView().findViewById(R.id.applist); 
    apkList.setAdapter(new ApkAdapter(getActivity(), packageList1, 
      packageManager)); 

    apkList.setOnItemClickListener(this); 
} 

private boolean isSystemPackage(PackageInfo pkgInfo) { 
    return ((pkgInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) ? true 
      : false; 
} 

@Override 
public void onItemClick(AdapterView<?> parent, View view, int position, 
     long row) { 
    PackageInfo packageInfo = (PackageInfo) parent 
      .getItemAtPosition(position); 
    AppData appData = (AppData) getActivity().getApplicationContext(); 
    appData.setPackageInfo(packageInfo); 

    Intent appInfo = new Intent(getActivity().getApplicationContext(), 
      ApkInfo.class); 
    startActivity(appInfo); 
} 

} 
+0

> "... 응용 프로그램 사물함을 개발하기"- 아마도 당신은 이것을해서는 안됩니다. 나쁜 생각 같아. –

답변

0

당신은 시스템을 분류 할 수 없음 - 시스템은 플래그를 비교하는 애플 리케이션 :

isSystemPackage(PackageInfo pi) { 
    ApplicationInfo ai = packageManager.getApplicationInfo(pi.packageName, 0); 
    return ((ai.flags & ApplicationInfo.FLAG_SYSTEM) != 0); 
} 

참조 : ApplicationInfo Flags, FLAG_SYSTEM