Android 如何在代码中列出活动而不是包名?

Android 如何在代码中列出活动而不是包名?,android,Android,我正在使用以下代码列出所有已安装的活动,但它没有显示应用程序名称,而是显示com.xyz.xyz.dialer之类的名称 我希望它只显示应用程序名称。我需要在哪里换车,换什么 public class AppPicker extends ListActivity{ // Buffer used to store package and class information, and also determine the number of installed activities private

我正在使用以下代码列出所有已安装的活动,但它没有显示应用程序名称,而是显示com.xyz.xyz.dialer之类的名称 我希望它只显示应用程序名称。我需要在哪里换车,换什么

public class AppPicker extends ListActivity{

// Buffer used to store package and class information, and also determine the number of installed activities
private ArrayList<String[]> _activitiesBuffer = null;

// Buffers for package and class information
private String[] _packages = null;
private String[] _classes = null;

// Index used to fill buffers
private int _index = 0;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Get all installed activities (package and class information for every activity)
    getAllInstalledActivities();              

    // Set content to GUI
    setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, _classes));

    ListView lv = getListView();
    lv.setTextFilterEnabled(true);

    // Add listener
    lv.setOnItemClickListener(new OnItemClickListener() {

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

            // When clicked, show a toast with the selected activity
            Toast.makeText(
                getApplicationContext(), 
                ((TextView) view).getText(), 
                Toast.LENGTH_SHORT).show();

            // When clicked, start selected activity, if allowed or possible
            try {

                Intent intent = new Intent().setClassName(
                        _packages[position], // package 
                        _classes[position]); // class
                startActivity(intent);

            } catch (Exception e) {
                e.printStackTrace();
            }

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

    });

} // public void onCreate(Bundle savedInstanceState)
公共类AppPicker扩展ListActivity{
//用于存储包和类信息的缓冲区,还可确定已安装活动的数量
私有ArrayList_activitiesBuffer=null;
//包和类信息的缓冲区
私有字符串[]_packages=null;
私有字符串[]_classes=null;
//用于填充缓冲区的索引
私有int_指数=0;
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//获取所有已安装的活动(每个活动的包和类信息)
getAllInstalledActivities();
//将内容设置为GUI
setListAdapter(新的ArrayAdapter(this,R.layout.list_项,_类));
ListView lv=getListView();
lv.setTextFilterEnabled(真);
//添加侦听器
lv.setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
//单击后,显示所选活动的祝酒词
Toast.makeText(
getApplicationContext(),
((TextView)视图).getText(),
吐司。长度(短)。show();
//单击时,启动所选活动(如果允许或可能)
试一试{
Intent Intent=new Intent().setClassName(
_packages[position],//package
_类[位置];//类
星触觉(意向);
}捕获(例外e){
e、 printStackTrace();
}
}//public void onItemClick(AdapterView父对象、视图、int位置、长id)
});
}//创建公共void(Bundle savedInstanceState)
这是getInstalledActivities方法。为了便于访问,我在这里将其分开

   /*
 * Get all installed activities
 */
private void getAllInstalledActivities() {

    // Initialize activities buffer
    _activitiesBuffer = new ArrayList<String[]>();

    final Intent intent = new Intent(Intent.ACTION_MAIN, null);
    intent.addCategory(Intent.CATEGORY_LAUNCHER);
    final List<ResolveInfo> pkgAppsList = getPackageManager().queryIntentActivities( intent, 0);

    Iterator<ResolveInfo> iterator1 = pkgAppsList.iterator();
    while (iterator1.hasNext()) {

        ResolveInfo resolveInfo = iterator1.next();

        String[] buf = new String[] {
                resolveInfo.activityInfo.packageName, 
                resolveInfo.activityInfo.name};

        _activitiesBuffer.add(buf);

    } // while (iterator1.hasNext())

    _packages = new String[_activitiesBuffer.size()];
    _classes = new String[_activitiesBuffer.size()];

    Iterator<String[]> iterator2 = _activitiesBuffer.iterator();
    while (iterator2.hasNext()) {

        String[] buf = iterator2.next();

        // Store package information
        _packages[_index] = buf[0]; 

        // Store class information
        _classes[_index] = buf[1];

        _index++;

    } // while (iterator2.hasNext())

} // private void getAllInstalledActivities()    
/*
*获取所有已安装的活动
*/
私有void getAllInstalledActivities(){
//初始化活动缓冲区
_activitiesBuffer=新的ArrayList();
最终意图=新意图(Intent.ACTION\u MAIN,空);
intent.addCategory(intent.CATEGORY_启动器);
最终列表pkgAppsList=getPackageManager().QueryInputActivities(intent,0);
迭代器迭代器1=pkgAppsList.Iterator();
while(iterator1.hasNext()){
ResolveInfo ResolveInfo=iterator1.next();
字符串[]buf=新字符串[]{
resolveInfo.activityInfo.packageName,
resolveInfo.activityInfo.name};
_activitiesBuffer.add(buf);
}//while(iterator1.hasNext())
_packages=新字符串[_activitiesBuffer.size()];
_classes=新字符串[_activitiesBuffer.size()];
迭代器迭代器2=_activitiesBuffer.Iterator();
while(iterator2.hasNext()){
字符串[]buf=iterator2.next();
//存储包信息
_包裹[_索引]=buf[0];
//存储类信息
_类别[_指数]=buf[1];
_索引++;
}//while(iterator2.hasNext())
}//私有void getAllInstalledActivities()

实际上,在您的系统中,应用程序以其唯一的软件包名称存储,这就是为什么您要将它们与它们一起列出。如果您只需要该名称的最后一部分(假设没有重复项),您可以做一些技巧:

String s = "com.example.MyApp";
String appName = s.substring(s.lastIndexOf(".")+1); // appName <- MyApp
String s=“com.example.MyApp”;

字符串appName=s.substring(s.lastIndexOf(“.”+1);//appName我认为MyApp不一定是应用程序名。我刚刚浏览了应用程序,包名和应用程序名似乎不同。你能告诉我在上面发布的代码中可以修改什么吗?试试
ResolveInfo ResolveInfo=iterator1.next();System.out.println(“label=”+resolveInfo.loadLabel(getPackageManager());
如果loadLabel提供了您想要的字符串,请查看您的日志。如果我已经理解了您想要的内容,您需要进入
res/strings.xml
而不是通过package Manager检索的包名。不做任何事情。仍然一样