如何拉清单安装的应用程序的名称,包装名称和图标绘制 [英] How to pull List of installed App name, package name and icon drawable

查看:227
本文介绍了如何拉清单安装的应用程序的名称,包装名称和图标绘制的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图找出如何我可以实现这个code到我现有的源$ C ​​$ C。目前,我有一个显示列表视图所有已安装的应用程序和点击就会发出意向的应用程序的一些源。我需要如何拉图标,并添加到这个列表视图中的一些支持。

任何帮助,源$ C ​​$ C编辑,链接,等会帮我解决这个问题。

感谢您

ListInstalledActivitiesActivity

 公共类ListInstalledActivitiesActivity扩展ListActivity {

    //缓冲区用于存储包和类信息,并且还确定安装的活动的数量
    私人的ArrayList<的String []> _activitiesBuffer = NULL;

    //缓冲区的包和类信息
    私有String [] _​​packages = NULL;
    私有String [] _​​classes = NULL;

    //指数用于填充缓冲区
    私人诠释_index = 0;

    / **第一次创建活动时调用。 * /
    @覆盖
    公共无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.main3);
        //获取所有安装活动(包和类信息,每一项活动)
        getAllInstalledActivities();

        //设置内容GUI
        setListAdapter(新ArrayAdapter<字符串>(这一点,R.layout.list_item,_classes));

        ListView的LV = getListView();
        lv.setTextFilterEnabled(真正的);

        //添加监听器
        lv.setOnItemClickListener(新OnItemClickListener(){

            公共无效onItemClick(适配器视图<>母公司视图中查看,INT位置,长的id){

                //单击时,显示出与所选择的活动敬酒
                Toast.makeText(
                    getApplicationContext(),
                    ((TextView中)查看).getText()
                    Toast.LENGTH_SHORT).show();

                //单击时,启动所选的活动,如果允许的话还是可能的
                尝试 {

                    意向意图=新的意图()。setClassName(
                            _packages [位置],//包
                            _classes [位置]); // 类
                    startActivity(意向);

                }赶上(例外五){
                    Toast.makeText(getApplicationContext(),无法启动选定的应用程序。,Toast.LENGTH_SHORT);
                }

          } //公共无效onItemClick(适配器视图<>母公司视图中查看,INT位置,长ID)

        });

    } //公共无效的onCreate(包savedInstanceState)

    / *
     *获取所有安装活动
     * /
    私人无效getAllInstalledActivities(){


        //初始化活动缓冲区
        _activitiesBuffer =新的ArrayList<的String []>();

        最终意向意图=新的意图(Intent.ACTION_MAIN,NULL);
        intent.addCategory(Intent.CATEGORY_LAUNCHER);
        最后的名单,其中,ResolveInfo> 。pkgAppsList = getPackageManager()queryIntentActivities(意向,0);

        迭代器< ResolveInfo>的iterator1 = pkgAppsList.iterator();
        而(iterator1.hasNext()){

            ResolveInfo resolveInfo = iterator1.next();

            的String [] buf中=新的String [] {
                    resolveInfo.activityInfo.packageName,
                    resolveInfo.activityInfo.name};

            _activitiesBuffer.add(BUF);

        } //而(iterator1.hasNext())

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

        迭代器<的String []>的iterator2 = _activitiesBuffer.iterator();
        而(iterator2.hasNext()){

            的String [] BUF = iterator2.next();

            //存储包信息
            _packages [_index] = buf中[0];

            //存储类信息
            _classes [_index] = buf中[1];

            _index ++;

        } //而(iterator2.hasNext())

    } //私人无效getAllInstalledActivities()

      }
 

main3.xml

 < LinearLayout中的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
     机器人:layout_width =FILL_PARENT
     机器人:layout_height =FILL_PARENT
     机器人:方向=垂直>

     <的ListView
         机器人:ID =@ + ID / Android的:清单
         机器人:layout_width =FILL_PARENT
         机器人:layout_height =FILL_PARENT/>

      <! - < ImageView的 - >
      <  - 机器人:ID =@ + ID / ImageView02 - >
      !<  - 机器人:layout_width =FILL_PARENT - >
      !<  - 安卓layout_height =WRAP_CONTENT - >
      !<  - 安卓layout_marginBottom =10dp - >
      !<  - 安卓paddingBottom会=5DP - >


      < / LinearLayout中>
 

解决方案

要获取安装的应用程序的名称和图标,你需要使用软件包管理器类,这里是一个片段的code,这将让你获取应用程序的名称和图标

 进口android.app.Activity;
进口android.content.Intent;
进口android.content.pm.PackageManager;
进口android.content.pm.ResolveInfo;
进口android.graphics.drawable.Drawable;
进口android.os.Bundle;
进口android.util.Log;
进口android.view.View;
进口android.view.ViewGroup;
进口android.widget.ImageView;
进口android.widget.LinearLayout;
进口android.widget.TextView;

公共类FetchApplicationsActivity延伸活动{

    TextView的数据;
    ImageView的此搜索;
    的LinearLayout holdlayout;
    查看L1;
    私人ArrayList的结果;
    名单< ResolveInfo>清单;
    TextView的结果;
    字符串str =;
    可绘制图标;

    @覆盖
    公共无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.main);
        L1 = findViewById(R.id.Layout1);
        结果=新的ArrayList();
        PackageManager下午= this.getPackageManager();
        意向意图=新的意图(Intent.ACTION_MAIN,NULL);
        intent.addCategory(Intent.CATEGORY_LAUNCHER);
        表= pm.queryIntentActivities(意向,
                PackageManager.PERMISSION_GRANTED);
        对于(ResolveInfo rInfo:名单){
            海峡= rInfo.activityInfo.applicationInfo.loadLabel(PM)的ToString()
                    +\ N的;
            results.add(rInfo.activityInfo.applicationInfo.loadLabel(下午)
                    的ToString());
            Log.w(已安装的应用程序,rInfo.activityInfo.applicationInfo
                    .loadLabel(下午)的ToString());
            图标= rInfo.activityInfo.applicationInfo.loadIcon(PM);
            holdlayout =新的LinearLayout(getApplicationContext());
            holdlayout.setOrientation(LinearLayout.HORIZONTAL);
            数据=新的TextView(getApplicationContext());
            data.setText(STR);
            此搜索=新ImageView的(getApplicationContext());
            image1.setBackgroundDrawable(图标);
            ((ViewGroup中)holdlayout).addView(此搜索);
            ((ViewGroup中)holdlayout).addView(数据);
            ((ViewGroup中)L1).addView(holdlayout);

        }
    }
}
 

修改 - 您可以定义你的的main.xml

  XML版本=1.0编码=UTF-8&GT?;
< LinearLayout中的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    机器人:layout_width =FILL_PARENT
    机器人:layout_height =FILL_PARENT
    机器人:方向=垂直>



    <滚动型
        机器人:ID =@ + ID / scrollView1
        机器人:layout_width =match_parent
        机器人:layout_height =WRAP_CONTENT>


        <的LinearLayout
        机器人:ID =@ + ID /布局1
        机器人:layout_width =match_parent
        机器人:layout_height =WRAP_CONTENT
        机器人:方向=垂直>



    < / LinearLayout中>
    < /滚动型>

< / LinearLayout中>
 

在这里,我已经创建动态 textviews Imageviews 布局来显示名称和图标。你可以创建自己的自定义列表,以显示这一点。

EDIT2 - 这是对的如何创建自定义列表也看这里。我想这些会解决这个问题。

I'm trying to figure out how i can implement this code into my existing source code. Currently i have some source that displays a list-view of all the installed apps and on-click will send intent to the application. I'm needing some support on how to pull the icon and add this into the list view.

Any help, source code editing, links, etc would help me resolve this.

Thank you

ListInstalledActivitiesActivity

public class ListInstalledActivitiesActivity 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);
        setContentView(R.layout.main3);
        // 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) {
                    Toast.makeText(getApplicationContext(), "Unable to start selected application.", Toast.LENGTH_SHORT);
                }

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

        });

    } // public void onCreate(Bundle savedInstanceState)

    /*
     * 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()

      }

main3.xml

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
     android:orientation="vertical" >

     <ListView
         android:id="@+id/android:list"
         android:layout_width="fill_parent"
         android:layout_height="fill_parent" />

      <!-- <ImageView -->
      <!--android:id="@+id/ImageView02" -->
      <!--android:layout_width="fill_parent" -->
      <!--android:layout_height="wrap_content" -->
      <!--android:layout_marginBottom="10dp" -->
      <!--android:paddingBottom="5dp" -->


      </LinearLayout>

解决方案

To fetch the names and icons of the installed applications, you need to use Package Manager class, here is a snippet of code, that will let you fetch application's name and icons

   import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

public class FetchApplicationsActivity extends Activity {

    TextView data;
    ImageView image1;
    LinearLayout holdlayout;
    View l1;
    private ArrayList results;
    List<ResolveInfo> list;
    TextView result;
    String str = "";
    Drawable icon;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        l1 = findViewById(R.id.Layout1);
        results = new ArrayList();
        PackageManager pm = this.getPackageManager();
        Intent intent = new Intent(Intent.ACTION_MAIN, null);
        intent.addCategory(Intent.CATEGORY_LAUNCHER);
        list = pm.queryIntentActivities(intent,
                PackageManager.PERMISSION_GRANTED);
        for (ResolveInfo rInfo : list) {
            str = rInfo.activityInfo.applicationInfo.loadLabel(pm).toString()
                    + "\n";
            results.add(rInfo.activityInfo.applicationInfo.loadLabel(pm)
                    .toString());
            Log.w("Installed Applications", rInfo.activityInfo.applicationInfo
                    .loadLabel(pm).toString());
            icon = rInfo.activityInfo.applicationInfo.loadIcon(pm);
            holdlayout = new LinearLayout(getApplicationContext());
            holdlayout.setOrientation(LinearLayout.HORIZONTAL);
            data = new TextView(getApplicationContext());
            data.setText(str);
            image1 = new ImageView(getApplicationContext());
            image1.setBackgroundDrawable(icon);
            ((ViewGroup) holdlayout).addView(image1);
            ((ViewGroup) holdlayout).addView(data);
            ((ViewGroup) l1).addView(holdlayout);

        }
    }
}

Edit- You can define your main.xml as,

?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >



    <ScrollView
        android:id="@+id/scrollView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >


        <LinearLayout
        android:id="@+id/Layout1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >



    </LinearLayout>
    </ScrollView>

</LinearLayout>

Here I have created dynamic textviews, Imageviews and layouts to show the names and icons. You can create your own customized list to show this.

Edit2- Here is a good link on how to create customized list and also look here. I think these will solve the issue.

这篇关于如何拉清单安装的应用程序的名称,包装名称和图标绘制的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆