What Does It Mean When An App Needs Com Sec Android.provider.badge
Bagaimana cara berinteraksi dengan BadgeProvider di ponsel Samsung untuk menambahkan hitungan ke ikon aplikasi?
TWLauncher Samsung memungkinkan aplikasi membuat jumlah lencana pada ikon aplikasi.
Ini sepenuhnya tidak berdokumen! Tidak disebutkan tentang itu di mana saja , dan hanya beberapa aplikasi yang menggunakannya (mis. Facebook, eBay).
Bagaimana Anda menggunakan fungsi ini untuk menambahkan hitungan ke ikon aplikasi Anda?
Ini sangat spesifik untuk perangkat Samsung. Saya tidak bertanya tentang Android secara umum. Saya hanya bertanya tentang badging antarmuka Touchwhiz Samsung yang saat ini memungkinkan badging. Android tidak.
Pertama, Anda harus menambahkan izin berikut ke file AndroidManifest.xml Anda.
<uses-permission Android:name="com.sec.Android.provider.badge.permission.READ" /> <uses-permission Android:name="com.sec.Android.provider.badge.permission.WRITE" />
Struktur kolom adalah sebagai berikut:
(integer) _id, (text) package, (text) class, (integer) badgecount, (blob) icon, (???) extraData
Untuk meminta SEMUA hasil dari BadgeProvider lakukan hal berikut:
// This is the content uri for the BadgeProvider Uri uri = Uri.parse("content://com.sec.badge/apps"); Cursor c = getContentResolver().query(uri, null, null, null, null); // This indicates the provider doesn't exist and you probably aren't running // on a Samsung phone running TWLauncher. This has to be outside of try/finally block if (c == null) { return; } try { if (!c.moveToFirst()) { // No results. Nothing to query return; } c.moveToPosition(-1); while (c.moveToNext()) { String pkg = c.getString(1); String clazz = c.getString(2); int badgeCount = c.getInt(3); Log.d("BadgeTest", "package: " + pkg + ", class: " + clazz + ", count: " + String.valueOf(cnt)); } } finally { c.close(); }
Untuk menambah jumlah lencana ke ikon aplikasi Anda
ContentValues cv = new ContentValues(); cv.put("package", getPackageName()); // Name of your activity declared in the manifest as Android.intent.action.MAIN. // Must be fully qualified name as shown below cv.put("class", "com.example.badge.activity.Test"); cv.put("badgecount", 1); // integer count you want to display // Execute insert getContentResolver().insert(Uri.parse("content://com.sec.badge/apps"), cv);
Jika Anda ingin menghapus jumlah lencana pada ikon Anda
ContentValues cv = new ContentValues(); cv.put("badgecount", 0); getContentResolver().update(Uri.parse("content://com.sec.badge/apps"), cv, "package=?", new String[] {getPackageName()});
BARU
Saya telah membuat proyek sumber terbuka yang dapat Anda impor sebagai perpustakaan untuk membantu ini. Ini dilisensikan sebagai Apache, jadi silakan menggunakannya sesuka Anda.
Anda bisa mendapatkannya dari sini: https://github.com/shafty023/SamsungBadger
tambahkan izin ini ke manifes
<!--for Android badge--> <uses-permission Android:name="com.Android.launcher.permission.READ_SETTINGS"/> <uses-permission Android:name="com.Android.launcher.permission.WRITE_SETTINGS"/> <!--for Samsung badge--> <uses-permission Android:name="com.sec.Android.provider.badge.permission.READ"/> <uses-permission Android:name="com.sec.Android.provider.badge.permission.WRITE"/> <!--for htc badge--> <uses-permission Android:name="com.htc.launcher.permission.READ_SETTINGS"/> <uses-permission Android:name="com.htc.launcher.permission.UPDATE_SHORTCUT"/> <!--for sony badge--> <uses-permission Android:name="com.sonyericsson.home.permission.BROADCAST_BADGE"/> <!--for apex badge--> <uses-permission Android:name="com.anddoes.launcher.permission.UPDATE_COUNT"/>
tambahkan nama paket ini ke kelas Anda:
final String HOME_PACKAGE_SONY = "com.sonyericsson.home"; final String HOME_PACKAGE_SAMSUNG = "com.sec.Android.app.launcher"; final String HOME_PACKAGE_LG = "com.lge.launcher2"; final String HOME_PACKAGE_HTC = "com.htc.launcher"; final String HOME_PACKAGE_Android = "com.Android.launcher"; final String HOME_PACKAGE_APEX = "com.anddoes.launcher"; final String HOME_PACKAGE_ADW = "org.adw.launcher"; final String HOME_PACKAGE_ADW_EX = "org.adwfreak.launcher"; final String HOME_PACKAGE_NOVA = "com.teslacoilsw.launcher";
untuk digunakan :
// just put your pachage and main activity class path String classPath = "ir.faasaa.resa.MainActivity"; ContentValues cv = new ContentValues(); cv.put("package", context.getPackageName()); cv.put("class", classPath); cv.put("badgecount", count); context.getContentResolver().insert(Uri.parse(HOME_PACKAGE_SAMSUNG), cv);
terima kasih kepada ShortcutBadger
Di Android, kami tidak memiliki pendekatan gaya lencana sebagai iOS tetapi beberapa produsen mendukung untuk menampilkan lencana pada ikon aplikasi.
Dukungan untuk sony dan HTC.
Contoh untuk ikon gaya lencana pada aplikasi di Android
Sony dan HTC mendukung penambahan lencana ke ikon aplikasi.
Untuk Sony
<uses-permission Android:name="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", Class Name); intent.putExtra("com.sonyericsson.home.intent.extra.badge.SHOW_MESSAGE", true); intent.putExtra("com.sonyericsson.home.intent.extra.badge.MESSAGE",number); intent.putExtra("com.sonyericsson.home.intent.extra.badge.PACKAGE_NAME", packageName); sendBroadcast(intent);
untuk HTC:
<uses-permission Android:name="com.htc.launcher.permission.READ_SETTINGS" /> <uses-permission Android:name="com.htc.launcher.permission.UPDATE_SHORTCUT" /> Intent updateIntent = new Intent("com.htc.launcher.action.UPDATE_SHORTCUT"); updateIntent.putExtra("packagename", packageName); updateIntent.putExtra("count", number); this.sendBroadcast(updateIntent); Intent setNotificationIntent = new Intent("com.htc.launcher.action.SET_NOTIFICATION"); ComponentName localComponentName = new ComponentName(packageName, className); setNotificationIntent.putExtra("com.htc.launcher.extra.COMPONENT", localComponentName.flattenToShortString()); setNotificationIntent.putExtra("com.htc.launcher.extra.COUNT", number); this.sendBroadcast(setNotificationIntent);
Saya menggunakan kelas ini untuk perangkat Samsung dan Sony (juga tersedia https://Gist.github.com/Tadas44/cdae2f5995f21bf1c27f ). Jangan lupa untuk menambahkan <uses-permission Android:name="com.sonyericsson.home.permission.BROADCAST_BADGE" />
ke 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; } }
Ada alat lain yang bisa Anda gunakan untuk perangkat Xperia
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); intent.putExtra("com.sonyericsson.home.intent.extra.badge.MESSAGE", "10");
Lebih detail seperti di bawah ini
http://www.marcusforsberg.net/blog/Android-notification-badge-app-icon-sony/
Untuk Pengguna Android 8.0 Oreo-
Bagi mereka yang mengalami kesulitan dalam menampilkan jumlah lencana untuk Samsung S8, S9 atau Pixel perangkat yang memiliki Oreo di dalamnya perhatikan bahwa ShortcutBadger Perpustakaan tidak mendukung API>26
untuk Samsung
Dilaporkan di sini di masalah . Di sini Anda harus memeriksanya terlebih dahulu jika isBadgeCounterSupported
seperti itu -
public boolean isBadgeCounterSupported() { // Workaround for bug in ShortcutBadger in version 1.1.19, registered as // https://github.com/leolin310148/ShortcutBadger/issues/266 if (Build.MANUFACTURER.equalsIgnoreCase("Samsung") && Build.VERSION.SDK_INT >= 26) { Log.d("LOG_TAG", "Launcher icon badge (ShortcutBadger) is not supported on Samsung devices running Android 8 (or newer)."); return false; } return ShortcutBadger.isBadgeCounterSupported(context); }
Satu-satunya cara adalah untuk menerapkan Lencana dari Pemberitahuan. Sedangkan untuk menerapkan lencana dari notifikasi Anda, lihat Dokumentasi Android , dan catat bagian "Setel hitungan notifikasi khusus".
Notification notification = new NotificationCompat.Builder(MainActivity.this, "my_channel_01") .setContentTitle("New Messages") .setContentText("You've received 3 new messages.") .setSmallIcon(R.drawable.ic_notify_status) .setNumber(messageCount) //this badge count .build();
Untuk lebih lanjut tentang Notifikasi di Android 8.0 lihat jawaban ini .
What Does It Mean When An App Needs Com Sec Android.provider.badge
Source: https://www.it-swarm-id.com/id/android/bagaimana-cara-berinteraksi-dengan-badgeprovider-di-ponsel-samsung-untuk-menambahkan-hitungan-ke-ikon-aplikasi/1042808907/
Posted by: arnoldtherstion1975.blogspot.com
0 Response to "What Does It Mean When An App Needs Com Sec Android.provider.badge"
Post a Comment