web-dev-qa-db-ja.com

FacebookはAndroidのアプリアイコンにバッジ番号をどのように追加しますか?

Androidアプリにバッジを追加することが可能かどうかを尋ねるQがいくつかあり、それらはすべて答えがありません...

しかし、どういうわけかAndroid 少なくともバッジのように見える何かをするように見える の最新のFacebookベータ版)==それは技術的に正確ではない場合でも。

その投稿で、コメンターの一人は、それが何らかの形でTouchWizに関連していると述べています。 ここでも 「S3 TouchWiz Jelly beanアドオン」の機能として言及します。

私はまだこれをどのように行うことができ、自分のアプリで使用できるAPIがある場合(適切な環境で実行する場合、つまりFBがこの動作を示す同じデバイス)に情報をいただければ幸いです?

52
epeleg

こんにちは、このlibを簡単に使用できます。

サポート:ソニー、サムスン、LG、HTC、Xiaomi、ASUS、ADW、APEX、NOVA、Huawei、ZUK、OPPO

ShortcutBadger

enter image description here

追加 :

int badgeCount = 1;
ShortcutBadger.applyCount(context, badgeCount);  

削除する :

ShortcutBadger.applyCount(context, 0);
30
Ahmad Aghazadeh

これがSonyデバイスでどのように行われるかを理解しました。

私はそれについてブログに書いた here 。また、別のSOこれについての質問 here


Sonyデバイスは、BadgeRecieverという名前のクラスを使用します。

  1. マニフェストファイルでcom.sonyericsson.home.permission.BROADCAST_BADGE権限を宣言します。

  2. IntentBadgeReceiverにブロードキャストします。

    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. できたこのIntentがブロードキャストされると、ランチャーはアプリケーションアイコンにバッジを表示します。

  4. バッジを再度削除するには、SHOW_MESSAGEをfalseに設定して新しいブロードキャストを送信するだけです:

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

答えを短くするためにこれを見つけた方法の詳細を除外しましたが、それはすべてブログで入手できます。誰かにとって興味深い読み物かもしれません。

23
Marcus

これを達成する標準的な方法はありません。 SonyやSamsungなどの多くのメーカーは、独自のAndroidカスタマイズで実装しています。

たとえば、Samsungでは、BADGE_COUNT_UPDATEアクションでインテントをブロードキャストする必要があります。MainActivityをメインアクティビティクラス、countをアプリアイコンに表示する番号とします。0はバッジを非表示にします。

_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", MainActivity.class.getName());
context.sendBroadcast(intent);
_

Sonyデバイスは@Marcus Answeredとして_"com.sonyericsson.home.action.UPDATE_BADGE"_アクションとカスタムエクストラを使用するため、アプリマニフェストに_"com.sonyericsson.home.permission.BROADCAST_BADGE"_権限を追加する必要があります。

_Intent intent = new Intent("com.sonyericsson.home.action.UPDATE_BADGE");
intent.putExtra("com.sonyericsson.home.intent.extra.badge.ACTIVITY_NAME", MainActivity.class.getName());
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);
_

注:将来リファクタリングを行う場合に備えて、ハードコードするのではなく、アプリのデータ(context.getPackageName()MainActivity.class.getName())をクエリすることが望ましいです。

12
Jorge Arimany

しかし、どういうわけかAndroidの最新のFacebookベータ版はまさにそれを行います...

リンク先のスクリーンショットを含むフォーラムスレッド ではありません。 vakama94の引用:

まあ、それはアプリだけでなく、実際にはTouchWizです。私はJellyBean 4.1.2を実行しているGalaxy S IIを持っていますが、それは同じことをしますが、他のいくつかのアプリケーションで

サムスンが、バッジとして使用する番号をアプリで公開できるパブリックAPIを持っているかどうかはわかりません。これは、彼らが少数の企業と個人的に行ったことです。

Nexusシリーズのデバイスなど、ストックAndroidホーム画面にこれらのバッジが表示されている証拠を提供してください。

10
CommonsWare