2014-01-24 2 views
6

В настоящее время я разрабатываю приложение, которое может создать ярлык для всего установленного приложения устройства. Чтобы создать ярлык, пользователю необходимо войти в систему как администратор и из этого действия, есть ListView, который содержит все установленные приложения. Пользователю необходимо выбрать приложение/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. Iterate Перечень ResolveInfo, который возвращается, чтобы получить данные, необходимые для создания Intent для запуска приложения и ресурс для отображения в качестве значка запуска.

    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

BTW, где я должен использовать «Drawable icon» в последней части вашего ответа? – androidBoomer

+0

Вам нужно использовать выпадающий значок, однако вы планируете отображать ярлыки в своем приложении. Вам нужно будет реализовать пользовательский интерфейс. Для пользовательских пусковых установок я использовал ранее [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

Смежные вопросы