2012-02-13 27 views
0

有沒有辦法顯示已安裝的應用程序在首選項中的列表?Android偏好設置應用程序列表

我做的是通過意向啓動其他應用程序的應用程序:

PackageManager pm = getApplicationContext().getPackageManager(); 
Intent appStartIntent = pm.getLaunchIntentForPackage("NAME OF THE PACKAGE"); 
if (null != appStartIntent) { 
      getApplicationContext().startActivity(appStartIntent); 
} 

我需要一種方法來從ListPreference拿到包的名稱,最好將包含所有的名稱ListPreference使用圖標安裝應用程序

這怎麼可能?

回答

5

沒關係,我使用自定義適配器工作,感謝在互聯網上的一些示例代碼。 (http://blog.isys-labs.com/creating-a-custom-listpreference/)

下面是代碼:

自定義列表偏好:

import java.util.List; 

import android.app.AlertDialog.Builder; 
import android.content.Context; 
import android.content.pm.ApplicationInfo; 
import android.content.pm.PackageManager; 
import android.preference.ListPreference; 
import android.util.AttributeSet; 

public class ApplicationSelector extends ListPreference 
{ 
    private Context contexte; 

    public ApplicationSelector(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     contexte=context; 
    } 

    @Override 
    protected void onPrepareDialogBuilder(Builder builder) { 
     int index = findIndexOfValue(getSharedPreferences().getString(
       getKey(), "1")); 

     AppliAdaptateur adapter = new AppliAdaptateur(contexte, this.getInstalledApplication(contexte), contexte.getPackageManager()); 

     builder.setAdapter(adapter, this); 
     super.onPrepareDialogBuilder(builder); 
    } 


    public static List<ApplicationInfo> getInstalledApplication(Context c) { 
     return c.getPackageManager().getInstalledApplications(PackageManager.GET_META_DATA); 
    } 


} 

定製Adaptator:

import java.util.List; 

import android.content.Context; 
import android.content.pm.ApplicationInfo; 
import android.content.pm.PackageManager; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 

import com.plop.R; 

public class AppliAdaptateur extends BaseAdapter { 
    private Context mContext; 
    private List mListAppInfo; 
    private PackageManager mPackManager; 

    public AppliAdaptateur(Context c, List list, PackageManager pm) { 
     mContext = c; 
     mListAppInfo = list; 
     mPackManager = pm; 
    } 

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

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

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

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // get the selected entry 
     ApplicationInfo entry = (ApplicationInfo) mListAppInfo.get(position); 

     // reference to convertView 
     View v = convertView; 

     // inflate new layout if null 
     if(v == null) { 
      LayoutInflater inflater = LayoutInflater.from(mContext); 
      v = inflater.inflate(R.layout.appliligne, null); 
     } 

     // load controls from layout resources 
     ImageView ivAppIcon = (ImageView)v.findViewById(R.id.ivIcon); 
     TextView tvAppName = (TextView)v.findViewById(R.id.tvName); 
     TextView tvPkgName = (TextView)v.findViewById(R.id.tvPack); 

     // set data to display 
     ivAppIcon.setImageDrawable(entry.loadIcon(mPackManager)); 
     tvAppName.setText(entry.loadLabel(mPackManager)); 
     tvPkgName.setText(entry.packageName); 

     // return view 
     return v; 
    } 
} 

,並在preference.xml:

<YOURPACKAGE.ApplicationSelector 
      android:defaultValue="Rien" 
      android:dependency="cbmain2" 
      android:entries="@array/listeChoix" 
      android:entryValues="@array/listeChoix" 
      android:key="pref22" 
      android:summary="Selection de l\&apos;action à effectuer" 
      android:title="Application" /> 

我希望它能幫到你

關於