我正在嘗試爲任何已安裝的應用程序創建可編程性的主頁快捷方式。爲其他程序包活動創建shorcut的最佳方法
考慮到我唯一可用的應用程序名稱,比如說計算器com.android.calculator2
(1.5)。
我正在使用當前的代碼波紋管,快捷方式已成功創建,但活動無法從快捷方式啓動(錯誤的活動類名稱,我猜),有時圖標似乎已損壞。
另外加com.android.launcher.permission.INSTALL_SHORTCUT
到manifest.xml
。
有沒有最佳的方法來實現這一目標?
String appName = "com.android.calculator2";
Context newAppContext = null;
// Get other package context
try {
newAppContext =
context.createPackageContext(appName, Context.CONTEXT_IGNORE_SECURITY);
} catch (NameNotFoundException e) {
e.printStackTrace();
}
// Create shortcut
if(newAppContext != null) {
// Get Application Name
PackageManager pm = context.getPackageManager();
ApplicationInfo ai;
try {
ai = pm.getApplicationInfo(appName, 0);
} catch (final NameNotFoundException e) {
ai = null;
}
// Get application label
String applicationName = (String) (ai != null ? pm.getApplicationLabel(ai) : "(unknown)");
// Shortcut intent
Intent shortcutIntent = new Intent (Intent.ACTION_MAIN);
/** Problem in here **
shortcutIntent.setClassName(newAppContext, newAppContext.getClass().getName());
*********************/
shortcutIntent.addCategory(Intent.CATEGORY_LAUNCHER);
shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
// Create intent
final Intent putShortCutIntent = new Intent();
putShortCutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
putShortCutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, applicationName);
putShortCutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
Intent.ShortcutIconResource.fromContext(newAppContext,
R.drawable.icon));
putShortCutIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
// Broadcast intent
context.sendBroadcast(putShortCutIntent);
}
編輯:
管理人正從PackageManager.getLaunchIntentForPackage(字符串的packageName)意圖實現這一目標。
所以:
// Intent shortcutIntent = new Intent (Intent.ACTION_MAIN);
// shortcutIntent.setClassName(newAppContext, newAppContext.getClass().getName());
// shortcutIntent.addCategory(Intent.CATEGORY_LAUNCHER);
// shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Intent shorcutIntent = pm.getLaunchIntentForPackage(appName);
謝謝@LAS_VEGAS,我理解這一點。但我想知道如何動態獲取活動名稱而不是硬編碼。 考慮到我只有包名「com.android.calculator2」,我可以使用PackageManager獲取它的ApplicationInfo,但沒有設法獲得包默認的Activity名稱。 – 2012-03-05 10:47:50
@Luis查看我的編輯 – Caner 2012-03-05 13:12:38
再次感謝@LAS_VEGAS,試過你的建議。然後,創建的快捷方式將調用打開快捷方式的應用程序對話框,也許我沒有正確解釋自己:) 不過,儘管如此,我仍然設法通過從PackageManager獲取Intent而不是手動定義一個Intent。 工作正常,因爲我不想以任何方式修改快捷方式,只需將它添加到主屏幕。 Intent shortcutIntent = pm.getLaunchIntentForPackage(appName); – 2012-03-05 17:27:20