Android Badge number on launcher icon for all mobile manufacturer - java

I need a badge counter on my application launcher icon.
I know the solution to get Badge counter inside the app, using TextView, But I need a solution to get the badge counter external to the app on the launcher icon.
In iOS we get the badge number count by
UIApplication.sharedApplication().applicationIconBadgeNumber
I am wondering why Android has not included anything like this with their SDK which every developer need.
Try 1 : Working only on sony mobiiles :
Intent badgeIntent = new Intent();
badgeIntent.setAction("com.sonyericsson.home.action.UPDATE_BADGE");
badgeIntent.putExtra("com.sonyericsson.home.intent.extra.badge.PACKAGE_NAME", this.getPackageName());
badgeIntent.putExtra("com.sonyericsson.home.intent.extra.badge.ACTIVITY_NAME", this.getClass().getName());
badgeIntent.putExtra("com.sonyericsson.home.intent.extra.badge.SHOW_MESSAGE", ShwMsgBulVar);
badgeIntent.putExtra("com.sonyericsson.home.intent.extra.badge.MESSAGE", "10");
context.sendBroadcast(badgeIntent);
Try 2 :
I tried the library :
https://github.com/leolin310148/ShortcutBadger
It works only for few manufacturers and not common for all android mobiles.
ShortCutBadger is not working on OPPO, VIVO, Xiomi, Reliance LYF default launchers.
After couple of research, I came to know that, badge number depends on launcher manufacturer and listed as below :
ShortCutBadger Suported :
Samsung : "com.sec.android.app.launcher"
Sony : "com.sonyericsson.home"
HTC : "com.htc.launcher"
Asus : "com.asus.launcher"
ShortCutBadger not Suported :
Oppo :"com.oppo.launcher"
Xiomi : "com.miui.home"
Vivo : "com.bbk.launcher2"
Lyf : "com.android.launcher3"
Go Launcher : "com.gau.go.launcherex"
So is there any other general method which can work on all manufacturer mobiles?
Read so many posts and did lot of search but Many tell there is no such generic solution which is applicable for all launchers.
But I feel there is a solution because whatsapp and facebook app display the badge number in all the above mentioned launcher.

There is no such function in Android as badge numbers are not a part of the platform.
A few libraries exist that try to achieve this such as https://github.com/leolin310148/ShortcutBadger but you should understand that it does not work for every manufacturer's device. Also as far as I understand the badges only appear over the icon when it is on a home screen and not in the app drawer.

Related

How to open an application in my application with click bottom (android Studio )

I would like to open an application in my application with ( jetpack compose, kotlin or java )
Do you think it's doable?
Currently, it opens it for me when leaving my application with this code
#Composable
fun HomeView(navController: NavController){
val context = LocalContext.current
intent.setPackage("com.whatsapp")
intent.setType("message/rfc822")
Button(onClick = {
context.startActivity(Intent.createChooser(intent,"choisir un app"))
}){
Text(text="open whatsapp like an iframe ")
}
}
an example of the result I want to have.
whatsapp is launched in my application with my appBar
This post
stackoverflow
from 6 years ago said it was not possible. But with the arrival of jetpack compose and recent versions of Android. I also wonder if that has changed.

Read custom Information Elements from WiFi Beacon on Android 12

please, I am working on new app, which should read Information Elements from WiFi beacon in scan. I have Android 12 and using something like this:
ScanResult r = results.get(i);
List<ScanResult.InformationElement> ie = getWiFiInformationElement(r);
I see in the ie array. There is SSID and more, but I don't see my extra IE item with data from my device with ID 0xDD. I checked by another device, and my extra IE is visible on the air, but not visible by my Android phone with my app.
Please, could you help me?

How to get 'correct' default launcher programmatically? Shortcuts lose their title

What have I done so far:
I am currenctly facing some problems with the launchers.
My application adds shortcuts to the workspace of the launcher (homescreen).
But on some devices (Samsum Duos) for example, the titles and /or icons
are changed back after reboot to my default application one.
So I am currently going through 1000s of lines code in the android
source to identify the problem, but was not able to find it.
I saw in InstallShortcutReceiver
a comment in line 183 that the "name" provided by Intent.EXTRA_SHORTCUT_NAME can in
some situations be used only for comparison etc and will be replaced
with the applications default name.
// This name is only used for comparisons and notifications, so fall back to activity name
// if not supplied
But (my Samsum Duos is rooted) I could find the complete information's
about the cell position and shortcutInfo's inside of the launcher.db.
So it was not gone, after reboot, but maybe only not correct initialized!
First Question:
Does anybody know the reason for a custom, programmatically created shortcut to change the title and or icon back to the application's one that created it?
Next story:
I noticed that this issue was reproducible on my Samsum Duos, so I decided
to exclude the Devices Launcher from my "save launcher" list.
To receive the default launcher I am doing the following:
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
ResolveInfo resolveInfo = null;
try {
resolveInfo = context.getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY); //can return null!
}catch(RuntimeException e){
ExceptionHandler.logAndSendException(e);//package manager has died
return false;
}
But the problem now is, that it always returns that the default launchers
package is: com.android.launcher2.Launcher, which would be the standard
android stock launcher. But I know that Samsum uses the TouchWiz home
launcher, whos Package is located under com.sec.android.app.launcher!
That is also where I found the launcher.db and all its ShortcutInfo's.
2. Second Question
How do I get reproducible the correct default launcher package to identify
which launcher is used?
edit:
I kind of fixed the second problem. Somehow the ResolveInfo I get from
the PackageManager seems to be not reliable.
For the Samsum Duos I get:
resolveInfo.activityInfo.name = com.android.launcher2.Launcher
resolveInfo.activityInfo.packageName = com.sec.android.app.launcher //this is what I need
But for the Redmi MIUI:
resolveInfo.activityInfo.name = com.miui.home.launcher.Launcher //this time I would need this
resolveInfo.activityInfo.packageName = com.miui.home //the packageName is not complete!
I need an unique identifier for the launcher! So I thought activityInfo.name would be the
way to go, but it isn't in some situations. And the packageManager seems to apply to too many devices. Any suggestions?
Cheers!

How does Facebook add badge numbers on app icon in Android?

I know there are several Qs here that ask if its possible to add badges to an android app and they all end up with a NO answer...
But somehow the latest Facebook beta version for Android seems to do something which at least look like a badge even if it is not technically exactly that.
In that post one of the commenters says that it is somehow related to TouchWiz.
And also here they mention it as a feature of the "S3 TouchWiz Jelly Bean Addon".
I still would appreciate information on how does this can be done and if there is some API for this that I can use in my own app (when running in an appropriate environment - i.e. the same device where FB demonstrates this behavior) ?
Hi you can use this lib simply.
Support : Sony,Samsung,LG,HTC,Xiaomi,ASUS,ADW,APEX,NOVA,Huawei,ZUK,OPPO
ShortcutBadger
Add :
int badgeCount = 1;
ShortcutBadger.applyCount(context, badgeCount);
Remove :
ShortcutBadger.applyCount(context, 0);
I have figured out how this is done for Sony devices.
I've blogged about it here. I've also posted a seperate SO question about this here.
Sony devices use a class named BadgeReciever.
Declare the com.sonyericsson.home.permission.BROADCAST_BADGE permission in your manifest file:
Broadcast an Intent to the 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);
Done. Once this Intent is broadcast the launcher should show a badge on your application icon.
To remove the badge again, simply send a new broadcast, this time with SHOW_MESSAGE set to false:
intent.putExtra("com.sonyericsson.home.intent.extra.badge.SHOW_MESSAGE", false);
I've excluded details on how I found this to keep the answer short, but it's all available in the blog. Might be an interesting read for someone.
There is not a standard way to achieve this; Many makers such as Sony or Samsung have implemented it in their own Android customization.
For example in Samsung, you have to broadcast an intent with BADGE_COUNT_UPDATE action, let MainActivity be your main activity class and count be the number you want to display in your app icon, note that 0 will hide the badge:
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 devices uses "com.sonyericsson.home.action.UPDATE_BADGE" action with their custom extras as #Marcus Answered, so you have to add "com.sonyericsson.home.permission.BROADCAST_BADGE" permission to your app manifest and:
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);
Note: it's desirable to query your app's data (context.getPackageName(), MainActivity.class.getName()) rather than hardcode it just in case you do some refactoring in the future.
But somehow the latest Facebook beta version for android does just that...
Not according to the forum thread that contains the screenshot that you linked to. Quoting vakama94:
Well, that's actually TouchWiz and not just the app. I have a Galaxy S II running JellyBean 4.1.2 and it makes the same thing but with some other applications
Whether Samsung has a public API to allow apps to publish numbers to be used as badges, I cannot say. This could be something that they did privately with a few firms.
You are welcome to provide evidence of seeing these badges on a stock Android home screen, such as one of the Nexus series devices.
I answer to this assuming that some flutter dev can search this...
In Flutter, you can achieve this by using
Flutter app badger library.
It is as simple as
FlutterAppBadger.updateBadgeCount(1); // show
FlutterAppBadger.removeBadge(); // hide

How to create private notes with android Memo App

I'm building an android app which provides the ability to create notes.
For this purpose I start next activity:
Intent notepad = new Intent(Intent.ACTION_MAIN);
notepad.addCategory(Intent.CATEGORY_LAUNCHER);
notepad.setPackage("com.sec.android.app.memo");
// Verify it resolves
PackageManager packageManager = getPackageManager();
List<ResolveInfo> activities = packageManager.queryIntentActivities(notepad, PackageManager.GET_INTENT_FILTERS);
boolean isIntentSafe = activities.size() > 0;
// Start Notepad if it's safe
if (isIntentSafe)
{
startActivity(notepad);
}
The code works fine and native Memo App is launched successfully.
However, the notes I wrote in Memo from my App are visible when I launch Memo App from the desktop, and I would like that those notes would be private and it only be visible from my App.
This feature (create private notes) is available for iPhone Apps by NoteViewController class.
Does anyone know if that is posible for android App?
Thanks in advance.
No, the app has to be written with this usecase in mind. Memo wasn't. Also, memo is not available on all phones- many phones replace it with other apps with similar purpose. Some don't have a memo app at all. In fact most don't- the sec in your package name is Samasung Electronics Corp, that app will only appear on Samsung phones (and not all of them).

Categories

Resources