2013-07-10 1 views
0

이것은 시스템 설치 응용 프로그램 이름을 gridview에 표시하는 나의 예입니다. 하지만 특정 애플리케이션 이름을 gridvew 상단에 표시하고 싶습니다. 어떻게해야합니까? 아래는 listview에 선택된 응용 프로그램을 표시하는 전체 소스 코드입니다.이 응용 프로그램을 표시하고 싶습니다. ((p.packageName).equals("com.qurankarim.urdu")) 첫 번째 위치는 gridview입니다. 어떻게해야합니까? 나에게GridView의 첫 번째 위치에 응용 프로그램 이름을 표시하는 방법

   public class Learning extends Activity implements OnItemClickListener { 

/* whether or not to include system apps */ 
private static final boolean INCLUDE_SYSTEM_APPS = false; 

private ListView mAppsList; 
private AppListAdapter mAdapter; 
private List<App> mApps; 
boolean isPressed = false; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    setContentView(R.layout.learning); 

    final ImageButton Searchbtn = (ImageButton) findViewById(R.id.poweron); 
    Searchbtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (isPressed) { 
       Searchbtn.setImageResource(R.drawable.power_off); 
       finish(); 
      } else { 
       Searchbtn.setImageResource(R.drawable.power_on); 
      } 
      isPressed = !isPressed; 

     } 
    }); 


    GridView mAppsList = (GridView) findViewById(R.id.appslist); 

    // mAppsList = (ListView) findViewById(R.id.appslist); 
    mAppsList.setOnItemClickListener(this); 

    mApps = loadInstalledApps(INCLUDE_SYSTEM_APPS); 

    mAdapter = new AppListAdapter(getApplicationContext()); 
    mAdapter.setListItems(mApps); 
    mAppsList.setAdapter(mAdapter); 

    new LoadIconsTask().execute(mApps.toArray(new App[] {})); 
} 

public void onItemClick(AdapterView<?> parent, View view, int position, 
     long id) { 

    final App app = (App) parent.getItemAtPosition(position); 

    AlertDialog.Builder builder = new AlertDialog.Builder(this); 

    String msg = ""; 
    builder.setMessage(msg) 
      .setCancelable(true) 
      .setTitle(app.getTitle()) 
      .setIcon(mAdapter.getIcons().get(app.getPackageName())) 
      .setPositiveButton("Launch", 
        new DialogInterface.OnClickListener() { 
         public void 
    onClick(DialogInterface dialog, int id) { 
          // start the app by 
    invoking its launch intent 
          Intent i = 
    getPackageManager() 

    .getLaunchIntentForPackage(
              app.getPackageName()); 
          try { 
           if (i != null) { 

    startActivity(i); 
           } else { 
            i = new 

    Intent(app.getPackageName()); 

    startActivity(i); 
           } 
          } catch 
    (ActivityNotFoundException err) { 

    Toast.makeText(Learning.this, 

    "Error launching app", 

    Toast.LENGTH_SHORT).show(); 
           } 
         } 
        }) 
      .setNegativeButton("Cancel", 
        new DialogInterface.OnClickListener() { 
         public void 
    onClick(DialogInterface dialog, int id) { 
          dialog.cancel(); 
         } 
        }); 
    AlertDialog dialog = builder.create(); 
    dialog.show(); 
} 


private List<App> loadInstalledApps(boolean includeSysApps) { 
    List<App> apps = new ArrayList<App>(); 


    PackageManager packageManager = getPackageManager(); 

    List<PackageInfo> packs = packageManager.getInstalledPackages(0); 

    for (int i = 0; i < packs.size(); i++) { 
     PackageInfo p = packs.get(i); 
     ApplicationInfo applicationInfo = p.applicationInfo; 

     if ( ((p.packageName).equals("com.qurankarim.urdu")) 
       || ((p.packageName) 
    .equals("appinventor.ai_hamada_yousef_o.MP3Quruan_2")) 
       || 
    ((p.packageName).equals("biz.binzrysolution.qibla")) 
       || ((p.packageName).equals("com.EaseApps.duasof")) 
       || ((p.packageName).equals("com.EaseApps.hajj")) 
       || ((p.packageName) 

    .equals("com.HatafSoft.sahihmuslim_eng_free")) 
       || 
    ((p.packageName).equals("com.aliftek.quran_urdu")) 
       || 
    ((p.packageName).equals("com.amirmemon.quizgame.quran")) 
       || 
((p.packageName).equals("com.baqa.quran.fehmulquran")) 
       || 
((p.packageName).equals("com.baqa.quran.tafheemulquran")) 
       || ((p.packageName) 

.equals("com.bitsmedia.android.muslimpro")) 
       || ((p.packageName).equals("com.chaks.duaas")) 
       || ((p.packageName).equals("com.chaks.quran")) 
       || 
((p.packageName).equals("com.guidedways.iQuran")) 
       || 
((p.packageName).equals("com.guidedways.iQuranPro")) 
       || 
((p.packageName).equals("com.hajjguide.se.android")) 
       || 
((p.packageName).equals("com.iroshni.asanquran")) 
       || ((p.packageName).equals("com.osama.maher")) 
       || ((p.packageName).equals("com.osama.sodesEn")) 
       || 
    ((p.packageName).equals("com.perfection.WWWislan")) 
       || 
    ((p.packageName).equals("com.quran.labs.androidquran")) 

       || 
    ((p.packageName).equals("com.triosLabs.SahihMuslim")) 
       || 
    ((p.packageName).equals("com.triosLabs.hadithreader")) 
       || ((p.packageName).equals("com.wAllahsWord")) 
       || ((p.packageName).equals("com.yallasoft.quran")) 
       || 
    ((p.packageName).equals("com.yaz.sahihMuslimOne")) 
       || 
    ((p.packageName).equals("com.zx.AlQuran_karim_Free")) 
       ||  
    ((p.packageName).equals("com.zx.Alquran_uthmanic_Free")) 
       || 
    ((p.packageName).equals("excelarz.apps.dhqReader")) 
       || 
    ((p.packageName).equals("io.vov.android.vitamio.demo")) 
       || ((p.packageName).equals("islam3d.liveWPcube")) 
       || ((p.packageName).equals("mydotdev.quranurdu")) 
       || ((p.packageName).equals("net.xbound.zakirnaik")) 
       || ((p.packageName).equals("q.and.u")) 
       || ((p.packageName).equals("sadaqa.app.deentv")) 
       || 
     ((p.packageName).equals("com.verypositive.Quran")) 

     ) { 


      App app = new App(); 
      app.setTitle(p.applicationInfo.loadLabel(packageManager) 
        .toString()); 
      app.setPackageName(p.packageName); 
      app.setVersionName(p.versionName); 
      app.setVersionCode(p.versionCode); 
      CharSequence description = p.applicationInfo 
        .loadDescription(packageManager); 
      app.setDescription(description != null ? 
    description.toString() 
        : ""); 
      apps.add(app); 
      // } 
     } 
    } 
    return apps; 
} 

/** 
* An asynchronous task to load the icons of the installed applications. 
*/ 
private class LoadIconsTask extends AsyncTask<App, Void, Void> { 
    @Override 
    protected Void doInBackground(App... apps) { 

     Map<String, Drawable> icons = new HashMap<String, Drawable>(); 
     PackageManager manager = getApplicationContext() 
       .getPackageManager(); 

     for (App app : apps) { 
      String pkgName = app.getPackageName(); 
      Drawable ico = null; 
      try { 
       Intent i = 
    manager.getLaunchIntentForPackage(pkgName); 
       if (i != null) { 
        ico = manager.getActivityIcon(i); 
       } 
      } catch (NameNotFoundException e) { 
       Log.e("ERROR", "Unable to find icon for package '" 
         + pkgName + "': " + 
    e.getMessage()); 
      } 
      icons.put(app.getPackageName(), ico); 
     } 
     mAdapter.setIcons(icons); 

     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     mAdapter.notifyDataSetChanged(); 
    } 
} 

} 





         public class AppListAdapter extends BaseAdapter { 

    private LayoutInflater mInflater; 

    private List<App> mApps; 
    /** a map which maps the package name of an app to its icon drawable */ 
    private Map<String, Drawable> mIcons; 
    private Drawable mStdImg; 

/** 
    * Constructor. 
* 
* @param context the application context which is needed for the layout inflater 
*/ 
public AppListAdapter(Context context) { 
    // cache the LayoutInflater to avoid asking for a new one each time 
    mInflater = LayoutInflater.from(context); 

    // set the default icon until the actual icon is loaded for an app 
    mStdImg = context.getResources().getDrawable(R.drawable.icon); 
} 

@Override 
    public int getCount() { 
    return mApps.size(); 
    } 

@Override 
    public Object getItem(int position) { 
    return mApps.get(position); 
    } 

    @Override 
public long getItemId(int position) { 
    return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

    AppViewHolder holder; 
    if(convertView == null) { 
    convertView = mInflater.inflate(R.layout.row, null); 

    // creates a ViewHolder and stores a reference to the children view we want to  
    bind data to 
    holder = new AppViewHolder(); 
    holder.mTitle = (TextView) convertView.findViewById(R.id.apptitle); 
    holder.mIcon = (ImageView) convertView.findViewById(R.id.appicon); 
    convertView.setTag(holder); 
    } else { 
    // reuse/overwrite the view passed assuming(!) that it is castable! 
    holder = (AppViewHolder) convertView.getTag(); 
    } 

    App app = mApps.get(position); 

    holder.setTitle(app.getTitle()); 
    if (mIcons == null || mIcons.get(app.getPackageName()) == null) { 
    holder.setIcon(mStdImg); 
    } else { 
    holder.setIcon(mIcons.get(app.getPackageName())); 
    } 

    return convertView; 
} 


public void setListItems(List<App> list) { 
    mApps = list; 
} 


public void setIcons(Map<String, Drawable> icons) { 
    this.mIcons = icons; 
} 

/** 
* Returns the map containing the icons for each displayed app. 
* 
* @return a map which contains a mapping of package names to icon drawable for all 
    displayed apps 
*/ 
    public Map<String, Drawable> getIcons() { 
    return mIcons; 
    } 

/** 
* A view holder which is used to re/use views inside a list. 
*/ 
    public class AppViewHolder { 

    private TextView mTitle; 
    private ImageView mIcon; 

    /** 
    * Sets the text to be shown as the app's title 
    * 
    * @param title the text to be shown inside the list row 
    */ 
    public void setTitle(String title) { 
    mTitle.setText(title); 
    } 

    /** 
    * Sets the icon to be shown next to the app's title 
    * 
    * @param img the icon drawable to be displayed 
    */ 
    public void setIcon(Drawable img) { 
    if (img != null) { 
     mIcon.setImageDrawable(img); 
    } 
    } 
    } 
    } 






       public class App { 

private String title; 
private String packageName; 
private String versionName; 
private int versionCode; 
private String description; 

// ordinary getters and setters 

public String getTitle() { 
    return title; 
} 

public void setTitle(String title) { 
    this.title = title; 
} 

public String getPackageName() { 
    return packageName; 
} 

public void setPackageName(String packageName) { 
    this.packageName = packageName; 
} 

public String getVersionName() { 
    return versionName; 
} 

public void setVersionName(String versionName) { 
    this.versionName = versionName; 
} 

public int getVersionCode() { 
    return versionCode; 
} 

public void setVersionCode(int versionCode) { 
    this.versionCode = versionCode; 
} 

public String getDescription() { 
    return description; 
} 

public void setDescription(String description) { 
    this.description = description; 
} 

} 

답변

0

도와주세요 내가 가장 간단한 해결책은 다음 다른 목록을 다시 응용 프로그램의 나머지 부분을 추가하는 것입니다 생각합니다. 다음과 같이 할 수 있습니다.

List<App> apps = new ArrayList<App>(); 
List<PackageInfo> packs = getPackageManager().getInstalledPackages(0); 

for(PackageInfo package : packs) { 
    String name = package.packageName; 
    if("com.baqa.quran.tafheemulquran".equals(name)) { // Add other "equals" here 
     App app = new App(); // Create your App […] 
     apps.add(app); 
     packs.remove(package); 
    } 
} 

for(PackageInfo package : packs) { 
    App app = new App(); // Create your App […] 
    apps.add(app); 
} 
관련 문제