2014-01-24 85 views
6

我目前正在開發一個應用程序,可以創建設備的所有安裝應用程序的快捷方式。爲了創建快捷方式,用戶需要以管理員身份登錄,並從該活動登錄,其中包含一個ListView,其中包含所有已安裝的應用程序。用戶需要選擇app/s,以便創建快捷方式。如何在Android的自定義啓動器中創建應用快捷方式?

private boolean Generate_Shortcut(Context context, String appName, boolean isTrue) { 
    boolean flag =false ; 
    int app_id=-1; 
    PackageManager pm = context.getPackageManager(); 
    Intent i = new Intent(Intent.ACTION_MAIN); 
    i.addCategory(Intent.CATEGORY_LAUNCHER); 
    List<ResolveInfo> res = pm.queryIntentActivities(i,0); 


for(int k=0; k<res.size(); k++) { 
    if(res.get(k).activityInfo.loadLabel(pm).toString().equals(appName)){ 
     flag = true; 
     app_id = k; 

     break; 
    } 
} 

if(flag) { 
    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); 

    if(isTrue) {  
     // CREATE SHORTCUT 
     intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(context, R.drawable.ic_launcher)); 
     intent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");  
    } else { 
     // REMOVE SHORTCUT 
     intent.setAction("com.android.launcher.action.UNINSTALL_SHORTCUT"); 
    } 

    context.sendBroadcast(intent); 

} else 
    System.out.println("applicaton not found"); 
return true; 
} 

選擇應用程序後,它將在主活動中創建一個具有GridView的快捷方式。這裏的問題是創建的快捷方式是在主屏幕中創建的。現在我的問題是,如何在我的應用程序(MainActivity.java)中創建一個快捷方式,而不是在主屏幕中?

+0

請您詳細說明「在當前正在開發的應用程序中創建一個快捷方式」嗎?你想創造一種發射器嗎? –

+0

@AndrewT。,是的,這就是我想要做的。我想在我的應用程序內創建一個啓動器。 – androidBoomer

+0

由於快捷方式位於您自己的應用程序內,因此您可以根據自己的需要進行操作。只需存儲您已經顯示給用戶的信息,然後使用它。 –

回答

3

可以在您的應用程序中顯示將啓動另一個應用程序的圖標。您可以使用PackageManager發現已安裝的應用程序並獲取您應該顯示的啓動器圖標。

  1. 從應用程序的上下文中獲取PackageManager

    PackageManager pm = context.getPackageManager(); 
    
  2. 創建將用於查詢存在的安裝的應用程序,並會顯示在啓動的意圖。

    Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); 
    mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); 
    
  3. 查詢的對於其匹配的IntentFilter我們mainIntent任何應用程序。

    List<ResolveInfo> apps = pm.queryIntentActivities(mainIntent, 0); 
    
  4. 迭代返回給獲得必要的創建啓動應用程序,並顯示爲啓動器圖標資源的意圖的細節ResolveInfo名單。

    for (ResolveInfo app : apps) { 
        // Create an Intent that can be use to launch the application 
        Intent intent = new Intent(Intent.ACTION_MAIN); 
        intent.addCategory(Intent.CATEGORY_LAUNCHER); 
        intent.setComponent(new ComponentName(app.activityInfo.applicationInfo.packageName, app.activityInfo.name)); 
    
        // Get the icon to display in your UI 
        Drawable icon = app.activityInfo.loadIcon(pm); 
    } 
    

UPDATE: 您可以在這裏找到創建自定義啓動的walkthru:http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/

+0

這是我的完整代碼。見上面的編輯。 – androidBoomer

+0

順便說一下,我應該在哪裏使用答案最後部分的「可繪製圖標」? – androidBoomer

+0

您需要使用可繪製圖標,但是您計劃在應用內顯示快捷方式。你需要實現UI。對於自定義啓動器,我過去曾使用[GridView](http://developer.android.com/guide/topics/ui/layout/gridview.html)。 – csmurphy84

4

你試試?

<activity android:name=".YourActivity" android:label="@string/app_name"> 
    <intent-filter> 
    <action android:name="android.intent.action.CREATE_SHORTCUT" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter> 
</activity> 

然後在接收意圖的活動中,您爲您的快捷方式創建一個意圖並將其作爲活動結果返回。

// create shortcut if requested 
ShortcutIconResource icon = 
    Intent.ShortcutIconResource.fromContext(this, R.drawable.icon); 

Intent intent = new Intent(); 

Intent launchIntent = new Intent(this,ActivityToLaunch.class); 

intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, launchIntent); 
intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, someNickname()); 
intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon); 

setResult(RESULT_OK, intent); 
+1

它不工作... – androidBoomer

相關問題