如何在Android中的自定义启动器中创建应用程序快捷方式?

时间:2014-01-24 03:06:25

标签: android

我目前正在开发一款可以创建设备所有已安装应用程序快捷方式的应用。为了创建快捷方式,用户需要以管理员身份登录,并且从该活动中,有一个包含所有已安装应用程序的ListView。用户需要选择app / s以便创建快捷方式。

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;
}

选择应用程序后,它将在Main Activity中创建一个具有GridView的快捷方式。这里的问题是创建的快捷方式是在主屏幕中创建的。现在我的问题是,如何在主屏幕中创建应用程序内的快捷方式(MainActivity.java)?

2 个答案:

答案 0 :(得分: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 :(得分:3)

可以在应用程序中显示将启动另一个应用程序的图标。您可以使用PackageManager来发现已安装的应用程序并获取应显示的启动器图标。

  1. 从应用程序的上下文中获取PackageManager

    PackageManager pm = context.getPackageManager();
    
  2. 创建一个intent,用于查询已存在并将在启动器中显示的已安装应用程序。

    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列表,以获取创建用于启动应用程序的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);
    }
    
  5. 更新: 您可以在此处找到创建自定义启动器的步骤:http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/