2014-01-24 88 views
0

我正在從我的設備上創建已安裝的應用程序的快捷方式。我想要在我的應用程序中獲取所有應用程序的啓動器圖標。但因爲我不知道該代碼得到它,我用這一個的平均時間(這是我正在開發當前應用程序的圖標):在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); 

回答

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" /> 
+0

獲得誤差在i.addView(i)中。它說,方法addView(ImageView)對於ImageView類型是未定義的。 – androidBoomer

+0

也在行i =(ImageView)i.getChildAt(0),它表示,方法getChildAt(int)未定義類型ImageView – androidBoomer

+0

@androidBoomer:我的壞,抱歉!我在我的答案中更新了代碼。 – VikramV

相關問題