2013-09-30 22 views
5

bạn có thể nghĩ rằng đây là câu hỏi trùng lặp nhưng tôi muốn câu trả lời cụ thể hơn bất kỳ câu hỏi nào tương tự như câu hỏi này.thêm huy hiệu thông báo vào biểu tượng ứng dụng trong android

trước tiên nó nói rằng giống như facebook có huy hiệu thông báo với thiết bị samsung. How does Facebook add badge numbers on app icon in Android?. và nó trở thành launcher touchwiz có thể là launcher mặc định của các thiết bị samsung. khi tôi thử kiểm tra thiết bị samsung của mình bằng trình khởi chạy nova. nó cần phải cài đặt một số phần mềm của bên thứ ba hoặc Nova TestlaUnread.

Có thực tế. tôi nghĩ touchWiz đang thêm huy hiệu cho tất cả ứng dụng, nhưng khi tôi cố gắng thử nghiệm với ứng dụng của mình để có một số thông báo, nó không hiển thị bất kỳ huy hiệu nào. như tôi phát hiện ra rằng samsung TouchWiz chỉ hiển thị ứng dụng để ứng dụng được chọn như đã nêu ở đây: UI help for Notification on icon

The question is: is there any way to let know the touchWiz to add badge to my app-icon? Đó là cho thiết bị samsung,

với đối số cuối cùng, nó có vẻ như trình chạy của các nhà cung cấp khác nhau là một người chịu trách nhiệm về các huy hiệu trong biểu tượng ứng dụng trong Android. Sony Experia sử dụng Experia Home/Launcher làm trình khởi chạy mặc định của nó. trong thiết bị sony của tôi, họ đã có một số huy hiệu trong đó sms hoặc cuộc gọi nhỡ hoặc facebook.

The question is: like the previous question, is there any way to let know experia home to add badge to my app icon?

vì tôi đã suy nghĩ có lẽ tương tác với các phóng dường như giải pháp này "thêm huy hiệu biểu tượng ứng dụng".

và có giải pháp này về bí danh hoạt động này và thay đổi biểu tượng ứng dụng theo thời gian mà tôi nghĩ là rác. Is there a way to add a badge to an application icon in Android?

vì vậy tôi đang tìm giải pháp tương tác với các trình khởi chạy là nhà cung cấp cụ thể.

'bất kỳ giải pháp sẽ được đánh giá thậm chí tôi sẽ đi sâu với việc sử dụng phát triển tự nhiên trong android'

Cảm ơn trước

+0

Có, tôi đã viết lên một cách-đến đây http://stackoverflow.com/questions/20136483/how-do-you-interface-with-badgeprovider -on-samsung-phones/20136484 # 20136484 –

+0

Bản sao có thể có của [Có cách nào để thêm huy hiệu vào biểu tượng ứng dụng trong Android không?] (https://stackoverflow.com/questions/2905542/is-there-a- cách để thêm một huy hiệu-to-an-ứng dụng-biểu tượng-in-android) –

Trả lời

0

Ngoài giải pháp Daniel Ochoa của Samsung (xem nhận xét về OP), tôi đã tìm làm thế nào điều này được thực hiện cho các thiết bị Sony.

Tôi đã viết blog về nó here. Tôi cũng đã đăng câu hỏi SO riêng về điều này here.


Thiết bị Sony sử dụng lớp có tên BadgeReciever.

  1. Khai báo sự cho phép com.sonyericsson.home.permission.BROADCAST_BADGE trong file manifest của bạn:

  2. Broadcast một Intent đến BadgeReceiver:

    Intent intent = new Intent(); 
    
    intent.setAction("com.sonyericsson.home.action.UPDATE_BADGE"); 
    intent.putExtra("com.sonyericsson.home.intent.extra.badge.ACTIVITY_NAME", "com.yourdomain.yourapp.MainActivity"); 
    intent.putExtra("com.sonyericsson.home.intent.extra.badge.SHOW_MESSAGE", true); 
    intent.putExtra("com.sonyericsson.home.intent.extra.badge.MESSAGE", "99"); 
    intent.putExtra("com.sonyericsson.home.intent.extra.badge.PACKAGE_NAME", "com.yourdomain.yourapp"); 
    
    sendBroadcast(intent); 
    
  3. Xong. Khi điều này Intent được phát, trình khởi chạy sẽ hiển thị huy hiệu trên biểu tượng ứng dụng của bạn.

  4. Để xoá biểu tượng một lần nữa, chỉ cần gửi một phát sóng mới, lần này với SHOW_MESSAGE set false:

    intent.putExtra("com.sonyericsson.home.intent.extra.badge.SHOW_MESSAGE", false); 
    

tôi đã loại trừ chi tiết về cách Tôi thấy điều này để giữ cho các câu trả lời ngắn nhưng tất cả đều có sẵn trong blog. Có thể là một bài đọc thú vị cho ai đó.

+0

Vì câu hỏi này không có câu trả lời và bạn không có đại diện, tôi sẽ không gắn cờ điều này (Tôi đã được cung cấp cho bạn trả lời để xem xét). Tôi đề nghị bạn pad các câu hỏi với một số thông tin có liên quan từ những liên kết mặc dù. Tôi đã bỏ phiếu cho câu hỏi khác của bạn để bạn có thể trả lời câu hỏi đó. – OGHaza

+0

Cảm ơn @OGHaza. Tôi đã thêm một số mã vào câu trả lời này và sẽ trả lời câu hỏi chính của tôi về nó ngay bây giờ. – Marcus

+0

Tôi sẽ thử cái này. cảm ơn .. – Vik2r

4

Tôi sử dụng lớp này cho các thiết bị Samsung và Sony (cũng có sẵn https://gist.github.com/Tadas44/cdae2f5995f21bf1c27f). Đừng quên để thêm <uses-permission android:name="com.sonyericsson.home.permission.BROADCAST_BADGE" /> để AndroidManifest.xml

public class BadgeUtils { 


    public static void setBadge(Context context, int count) { 
     setBadgeSamsung(context, count); 
     setBadgeSony(context, count); 
    } 

    public static void clearBadge(Context context) { 
     setBadgeSamsung(context, 0); 
     clearBadgeSony(context); 
    } 


    private static void setBadgeSamsung(Context context, int count) { 
     String launcherClassName = getLauncherClassName(context); 
     if (launcherClassName == null) { 
      return; 
     } 
     Intent intent = new Intent("android.intent.action.BADGE_COUNT_UPDATE"); 
     intent.putExtra("badge_count", count); 
     intent.putExtra("badge_count_package_name", context.getPackageName()); 
     intent.putExtra("badge_count_class_name", launcherClassName); 
     context.sendBroadcast(intent); 
    } 

    private static void setBadgeSony(Context context, int count) { 
     String launcherClassName = getLauncherClassName(context); 
     if (launcherClassName == null) { 
      return; 
     } 

     Intent intent = new Intent(); 
     intent.setAction("com.sonyericsson.home.action.UPDATE_BADGE"); 
     intent.putExtra("com.sonyericsson.home.intent.extra.badge.ACTIVITY_NAME", launcherClassName); 
     intent.putExtra("com.sonyericsson.home.intent.extra.badge.SHOW_MESSAGE", true); 
     intent.putExtra("com.sonyericsson.home.intent.extra.badge.MESSAGE", String.valueOf(count)); 
     intent.putExtra("com.sonyericsson.home.intent.extra.badge.PACKAGE_NAME", context.getPackageName()); 

     context.sendBroadcast(intent); 
    } 


    private static void clearBadgeSony(Context context) { 
     String launcherClassName = getLauncherClassName(context); 
     if (launcherClassName == null) { 
      return; 
     } 

     Intent intent = new Intent(); 
     intent.setAction("com.sonyericsson.home.action.UPDATE_BADGE"); 
     intent.putExtra("com.sonyericsson.home.intent.extra.badge.ACTIVITY_NAME", launcherClassName); 
     intent.putExtra("com.sonyericsson.home.intent.extra.badge.SHOW_MESSAGE", false); 
     intent.putExtra("com.sonyericsson.home.intent.extra.badge.MESSAGE", String.valueOf(0)); 
     intent.putExtra("com.sonyericsson.home.intent.extra.badge.PACKAGE_NAME", context.getPackageName()); 

     context.sendBroadcast(intent); 
    } 

    private static String getLauncherClassName(Context context) { 

     PackageManager pm = context.getPackageManager(); 

     Intent intent = new Intent(Intent.ACTION_MAIN); 
     intent.addCategory(Intent.CATEGORY_LAUNCHER); 

     List<ResolveInfo> resolveInfos = pm.queryIntentActivities(intent, 0); 
     for (ResolveInfo resolveInfo : resolveInfos) { 
      String pkgName = resolveInfo.activityInfo.applicationInfo.packageName; 
      if (pkgName.equalsIgnoreCase(context.getPackageName())) { 
       String className = resolveInfo.activityInfo.name; 
       return className; 
      } 
     } 
     return null; 
    } 
} 
+1

Nó hoạt động tốt cho các thiết bị Samsung trong trường hợp của tôi nhưng có vẻ như bây giờ nó chỉ dành cho các thiết bị Samsung và Sony. Vì vậy, chúng ta cần phải cập nhật câu trả lời này để làm cho nó hoạt động cho các nhà sản xuất khác. – Harpreet

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