2011-01-31 36 views
15

Như bạn đã biết, khi ứng dụng được cài đặt danh nghĩa, biểu tượng được tạo ở màn hình menu trình khởi chạy. Điều tôi muốn làm là tạo biểu tượng ở màn hình chính của người dùng trong khi cài đặt. (mà không cần nhấn biểu tượng trong vòng 5 giây.)Tôi làm cách nào để đặt biểu tượng ứng dụng trên màn hình chính của trình khởi chạy?

tôi nghe điều này từ một nguồn khác để chỉ cần thêm

<category android:value="android.intent.category.HOME" /> 

để AndroidManifest.xml file, nhưng nó đã không làm việc.

Có cách nào khác để làm điều đó không?

+10

Bạn không nghĩ điều này có thể là hành vi xấu? Nếu người dùng muốn biểu tượng trên màn hình của họ, họ có thể tự làm rất dễ dàng. – Jems

+2

Điều này tương tự như những ứng dụng Windows gây hấn mà đòi hỏi phải tự thêm vào màn hình trên mỗi lần cài đặt/nâng cấp/khởi động. Ngay cả khi bạn tìm thấy một cách, * xin vui lòng không làm điều đó *. – ZoogieZork

+5

@Jems, ZoogieZork cả hai đều chính xác, nhưng một số trường hợp sẽ yêu cầu chức năng này, ví dụ: cửa hàng ứng dụng doanh nghiệp chỉ khả dụng cho nhân viên trên thiết bị của công ty. Rất nhiều người dùng này sẽ không có kiến ​​thức để đưa các ứng dụng lên màn hình chính, nhưng sẽ có trải nghiệm người dùng tốt hơn nhiều nếu chúng tôi làm điều đó cho họ. – Kennifer

Trả lời

15

Bạn có thể sử dụng này:

Intent shortcutIntent = new Intent(); 
shortcutIntent.setClassName("packageName", "className"); 
//shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
//shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

Intent addIntent = new Intent(); 
addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); 
addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "shortcut_name"); 
addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, 
Intent.ShortcutIconResource.fromContext(context, R.drawable.icon)); 
//intent.putExtra("duplicate", false); 
addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT"); 
      context.sendBroadcast(addIntent); 

Bạn phải sử dụng phép sau trong AndroidManaifest.xml bạn

<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" /> 

Bạn có thể sử dụng mã nhận xét theo yêu cầu của bạn.

Lưu ý rằng, có lẽ, trên API không được ghi lại. Nhưng nó đã có tác dụng.

+3

Để gỡ cài đặt phím tắt, hãy xem câu trả lời của tôi http://stackoverflow.com/questions/3480287/trying-to-uninstall-shortcut-but-shortcut-wont-go-away/ – Vasu

+0

Thực ra, với tư cách là người mới sử dụng Java, tôi có thể chỉ hiểu mã này từ ví dụ gỡ cài đặt của Kaillash. Ví dụ đó cho thấy bạn có thể đặt nó bên trong hoạt động chính. Dường như việc đặt mã này trong trình xử lý sự kiện onCreate() làm cho lối tắt được tạo/tái tạo mỗi khi ứng dụng được khởi chạy. Bất kỳ sửa chữa cho điều đó? – Wytze

+1

Nó hoạt động. Nhưng tôi nghĩ rằng tùy chọn: intent.putExtra ("trùng lặp", sai); nên được bật theo mặc định để tránh biểu tượng trùng lặp trên màn hình chính – anticafe

-1

Bạn có thể thực hiện chức năng setup mà người dùng có thể sử dụng để thực hiện tất cả các hành động tiềm ẩn. Ví dụ: tạo bất kỳ thư mục cần thiết nào cho người dùng (nếu chúng chưa tồn tại), thêm lối tắt vào màn hình chính và/hoặc tải dữ liệu ban đầu.

Đây là chức năng tôi đang viết ngay bây giờ, vì vậy hy vọng nó sẽ trở nên tốt đẹp. Nhưng vâng vấn đề là giữ nó ra khỏi số onCreate() để nó không được gọi mỗi lần!

+0

@Wytze: Đây là câu trả lời cho câu trả lời cuối cùng của bạn về câu trả lời của Kailash. –

7

Tôi sử dụng các phương pháp này để thêm hoặc xóa phím tắt đúng cách. Các phương pháp này hoạt động khá tốt và là giống như Hệ thống Android khi người dùng thêm/xóa phím tắt theo cách thủ công.

public static void addShortcut(Context context) 
{ 
    Intent shortcut = new Intent("com.android.launcher.action.INSTALL_SHORTCUT"); 

    ApplicationInfo appInfo = context.getApplicationInfo(); 

    // Shortcut name 
    shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, appInfo.name); 
    shortcut.putExtra("duplicate", false); // Just create once 

    // Setup activity shoud be shortcut object 
    ComponentName component = new ComponentName(appInfo.packageName, appInfo.className); 
    shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent(Intent.ACTION_MAIN).setComponent(component)); 

    // Set shortcut icon 
    ShortcutIconResource iconResource = Intent.ShortcutIconResource.fromContext(context, appInfo.icon); 
    shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconResource); 

    context.sendBroadcast(shortcut); 
} 

public static void deleteShortcut(Context context) 
{ 
    Intent shortcut = new Intent("com.android.launcher.action.UNINSTALL_SHORTCUT"); 

    ApplicationInfo appInfo = context.getApplicationInfo(); 

    // Shortcut name 
    shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, appInfo.name); 

    ComponentName comp = new ComponentName(appInfo.packageName, appInfo.className); 
    shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent(Intent.ACTION_MAIN).setComponent(comp)); 

    context.sendBroadcast(shortcut); 
} 

Quyền:

<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" /> 
<uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" /> 

BroadcastReceiver:

<receiver android:name="YOUR.PACKAGE.PackageReplacedReceiver"> 
    <intent-filter> 
     <action android:name="android.intent.action.PACKAGE_REPLACED" /> 
     <data android:scheme="package" android:path="YOUR.PACKAGE" /> 
    </intent-filter> 
</receiver> 
+0

Tính năng này có hoạt động cho tiện ích con không? – Sanjeev

8

này bây giờ được giải quyết bằng các dịch vụ Google Play. Bạn không phải thêm bất kỳ mã nào để làm điều đó nữa. Giờ đây, khi bạn cài đặt một ứng dụng từ Cửa hàng Google Play, ứng dụng sẽ tự động tạo biểu trưng trong màn hình chính. Nó có thể được xử lý trong cài đặt cửa hàng Google Play. Ngoại lệ: Nếu bạn đang sử dụng bất kỳ roms tùy chỉnh hoặc bệ phóng, nó không hoạt động với một số.

+0

Thực ra, đây là chức năng cơ bản kể từ khi bắt đầu trên Android - nó không liên quan gì đến cửa hàng chơi hoặc dịch vụ của nó. –

+0

Nếu bạn không muốn nó thì sao? Tôi có một ứng dụng chỉ nên được khởi chạy từ Mục đích của một ứng dụng khác. Nhưng tôi có hoạt động trình khởi chạy cho cài đặt. Tôi không muốn biểu tượng cài đặt sẽ được thêm vào màn hình chính theo mặc định. – Roel

1

tôi đã gặp rắc rối với các câu trả lời trên và đó là bởi vì API 22 và API có thể khác lợi nhuận trên getApplicationInfo() className trong debug mode/thi đua:.
"com.android.tools.fd.runtime.BootstrapApplication"

Điều quan trọng nhất là tôi cần thiết đặt toàn bộ đường dẫn đến lớp cho tên lớp. (xem thay đổi)

Ví dụ: tôi có các thông tin sau:
packageName = com.example.user.myapp
className = MainActivity

Trong Kailash answer tôi cần phải thay đổi dòng này:

shortcutIntent.setClassName("packageName", "className"); 

để

shortcutIntent.setClassName("com.example.user.myapp", "com.example.user.myapp.MainActivity"); 



Trong ChristopheCVBs answer tôi cần phải thay đổi dòng này:

ComponentName comp = new ComponentName(appInfo.packageName, appInfo.className); 

to

ComponentName comp = new ComponentName(appInfo.packageName, appInfo.packageName+".MainActivity"); 
Các vấn đề liên quan