获取Android中的已安装快捷方式的应用程序图标

时间:2014-01-24 10:03:54

标签: android

我正在从我的设备创建已安装应用程序的快捷方式。我想在我的应用程序中获取所有应用程序的启动器图标。但由于我不知道获取它的代码,我平均使用这个(它是我正在开发的当前应用程序的图标):

 intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(context, R.drawable.ic_launcher));

请您帮我从设备上获取已安装应用程序的启动器图标?

这是我安装快捷方式的代码。

 ActivityInfo ai = res.get(app_id).activityInfo;

 Intent shortcutIntent = new Intent(Intent.ACTION_MAIN);
 shortcutIntent.setClassName(ai.packageName, ai.name);
 shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

 Intent intent = new Intent();
 intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
 intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, appName);
 intent.putExtra("duplicate", false);
 intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(context, R.drawable.ic_launcher));
 intent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");      
 context.sendBroadcast(intent);

2 个答案:

答案 0 :(得分:1)

直到现在,应用程序无法强制进入主屏幕。它基本上被添加到启动器应用程序维护的应用程序列表中,通常主屏幕通常由用户控制。使应用程序能够混乱主屏幕将是一个公开的滥用邀请。

答案 1 :(得分:1)

如果您想要设备上所有应用程序的图标并将其显示为girdview,请按照以下代码操作。希望有所帮助。

<强> MainActivity.java

public class MainActivity extends Activity {

GridView mGrid;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    loadApps();

    setContentView(R.layout.activity_main);
    mGrid = (GridView) findViewById(R.id.myGrid);
    mGrid.setAdapter(new AppsAdapter());
}

private List<ResolveInfo> mApps;

private void loadApps() {
    Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
    mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);

    mApps = getPackageManager().queryIntentActivities(mainIntent, 0);
}

public class AppsAdapter extends BaseAdapter {
    public AppsAdapter() {
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        CheckableLayout l;
        ImageView i;

        if (convertView == null) {
            i = new ImageView(MainActivity.this);
            i.setScaleType(ImageView.ScaleType.FIT_CENTER);
            i.setLayoutParams(new ViewGroup.LayoutParams(50, 50));
            l = new CheckableLayout(MainActivity.this);
            l.setLayoutParams(new GridView.LayoutParams(GridView.LayoutParams.WRAP_CONTENT,
                    GridView.LayoutParams.WRAP_CONTENT));
            l.addView(i);
        } else {
            l = (CheckableLayout) convertView;
            i = (ImageView) l.getChildAt(0);
        }

        ResolveInfo info = mApps.get(position);
        i.setImageDrawable(info.activityInfo.loadIcon(getPackageManager()));

        return l;
    }


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

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

    public final long getItemId(int position) {
        return position;
    }
}

public class CheckableLayout extends FrameLayout implements Checkable {
    private boolean mChecked;

    public CheckableLayout(Context context) {
        super(context);
    }

    public void setChecked(boolean checked) {
        mChecked = checked;
//            setBackgroundDrawable(checked ?
//                    getResources().getDrawable(R.drawable.blue)
//                    : null);
            setBackground(checked ?
                    getResources().getDrawable(R.color.black)
                    : null);


    }

    public boolean isChecked() {
        return mChecked;
    }

    public void toggle() {
        setChecked(!mChecked);
    }

}

<强> activity_main.xml中

<?xml version="1.0" encoding="utf-8"?>

<GridView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/myGrid"
  android:layout_width="match_parent" 
  android:layout_height="match_parent"
    android:padding="10dp"
    android:verticalSpacing="10dp"

    android:horizontalSpacing="10dp"
    android:numColumns="auto_fit"
    android:columnWidth="60dp"
    android:stretchMode="columnWidth"

    android:gravity="center" />