2012-04-27 45 views
9

Tôi muốn giúp dễ dàng thêm ứng dụng của mình vào màn hình chính bằng cách nhấn một nút. Vì vậy, những gì tôi đang suy nghĩ là một nút ở dưới cùng của ứng dụng của tôi nói rằng "Thêm vào màn hình chủ" và khi nó được nhấn, nó thêm phím tắt vào màn hình chủ mà không đóng ứng dụng. Tôi nên thêm mã nào để thực hiện điều đó?Thêm phím tắt cho ứng dụng android Để màn hình chính Khi nhấn nút

Trả lời

22

Gửi một INSTALL_SHORTCUT chương trình phát sóng với kết quả Mục đích là phụ (trong trường hợp này, kết quả Ý định đang mở một số hoạt động trực tiếp).

//where this is a context (e.g. your current activity) 
    final Intent shortcutIntent = new Intent(this, SomeActivity.class); 

    final Intent intent = new Intent(); 
    intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); 
    // Sets the custom shortcut's title 
    intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.app_name)); 
    // Set the custom shortcut icon 
    intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(this, R.drawable.icon)); 
    // add the shortcut 
    intent.setAction("com.android.launcher.action.INSTALL_SHORTCUT"); 
    sendBroadcast(intent); 

Bạn cũng cần sự cho phép này trong biểu hiện của bạn:

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

Cảm ơn bạn đã giải pháp. Việc này ổn với tôi. Nhưng tôi có một vấn đề khác. Ứng dụng của tôi hỗ trợ nhiều ngôn ngữ. Vì vậy, khi tôi thay đổi ngôn ngữ điện thoại trong cài đặt, tên ứng dụng của tôi được cập nhật tốt trong trình khởi chạy. Nhưng tên ứng dụng không cập nhật sang ngôn ngữ mới trong màn hình chính. Tôi có cần phải thêm nhiều hơn nữa cho điều đó không? Cảm ơn bạn đã đọc .. – Sushil

+0

Vì bạn không thể sửa đổi một phím tắt, điều này sẽ là không thể. – volkersfreunde

+0

Tuyệt vời. Quyền trong tệp kê khai là bắt buộc. –

5

Bước đầu tiên, bạn nên thực hiện các luncher có thể nhận được một phát sóng:

<!-- Intent received used to install shortcuts from other applications --> 
    <receiver 
     android:name="com.android.launcher2.InstallShortcutReceiver" 
     android:permission="com.android.launcher.permission.INSTALL_SHORTCUT"> 
     <intent-filter> 
      <action android:name="com.android.launcher.action.INSTALL_SHORTCUT"/> 
     </intent-filter> 
    </receiver> 

Tiếp theo, thêm một sự cho phép trong manifest .xml

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

Cuối cùng, tạo một hàm và gọi nó là khi bạn nhấp vào nút:

public void createShortCut(){ 
    // a Intent to create a shortCut 
    Intent shortcutintent = new Intent("com.android.launcher.action.INSTALL_SHORTCUT"); 
    //repeat to create is forbidden 
    shortcutintent.putExtra("duplicate", false); 
    //set the name of shortCut 
    shortcutintent.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.shortcutname)); 
    //set icon 
    Parcelable icon = Intent.ShortcutIconResource.fromContext(getApplicationContext(), R.drawable.icon); 
    shortcutintent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon); 
    //set the application to lunch when you click the icon 
    shortcutintent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent(getApplicationContext() , EnterActivity.class)); 
    //sendBroadcast,done 
    sendBroadcast(shortcutintent); 
} 

làm điều đó như thế này:

button.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      createShortCut(); 
     } 
    }); 
+0

do đó onclick nên có phần thứ ba như là một kết quả? – CreeperHunter

+0

Có, Bạn chỉ cần làm như thế này: public void onClick (Xem v) { \t \t \t \t createShortCut(); \t \t \t} – Laolizi

2

Ok ... Tôi biết đây là chủ đề cũ nhưng tôi muốn chắc chắn kỹ sư truy cập chủ đề này có thông tin mới nhất.

Bắt đầu từ Android O - Là một phần của Giới hạn kiểm tra nền (Người nhận ngầm trong trường hợp này), chương trình phát sóng com.android.launcher.action.INSTALL_SHORTCUT không còn ảnh hưởng gì đến ứng dụng của bạn nữa bởi vì bây giờ nó là riêng tư, phát sóng ngầm.

mỗi Android O ActivityManagerService.java:

case "com.android.launcher.action.INSTALL_SHORTCUT": 
       // As of O, we no longer support this broadcasts, even for pre-O apps. 
       // Apps should now be using ShortcutManager.pinRequestShortcut(). 
       Log.w(TAG, "Broadcast " + action 
         + " no longer supported. It will not be delivered."); 

Tôi hy vọng điều này sẽ giúp!

+0

xác nhận, phát sóng cũ 'Intent' không hoạt động trên Oreo trở lên. devs có thể sử dụng [ShortcutManagerCompat] (https://developer.android.com/reference/android/support/v4/content/pm/ShortcutManagerCompat.html), khi nhắm mục tiêu API26 trở lên (phương thức 'requestPinShortcut' chứa dự phòng' Intent' cách trên <= API25, ở trên sử dụng 'ShortcutManager.pinRequestShortcut()') – snachmsm

Các vấn đề liên quan