Open Jongkeun opened 7 months ago
I also have the same problem, any solution?
Same here.
It's the only way to change app icon for Android. For instance check out the duckduckgo app.
Best thing you can do is to warn the user about what is about to happen.
It's the only way to change app icon for Android. For instance check out the duckduckgo app.
Best thing you can do is to warn the user about what is about to happen.
@jacobmolby , you can check this feature at Todoist. It looks like there are some workaround way. They are doing without closing.
It's the only way to change app icon for Android. For instance check out the duckduckgo app. Best thing you can do is to warn the user about what is about to happen.
@jacobmolby , you can check this feature at Todoist. It looks like there are some workaround way. They are doing without closing.
Interesting. So I've tried. In their implementation, you have to restart the app "to enable icon switching" but after that it works without closing.
I found this repo trying to implement something similar, but I haven't tried it out. https://github.com/gonodono/app-icon-change-demo.
Has anyone found a solution for this?
The best way I found was to patch ChangeIconModule, after activity.finish();
in the changeIcon
method, creating a new Intent:
Intent newIconIntent = Intent.makeMainActivity(new ComponentName(this.packageName, activeClass));
newIconIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
this.reactContext.startActivity(newIconIntent);
This will swiftly open the new activity after the old one ends. You'll also need to store the react context in the constructor:
public class ChangeIconModule extends ReactContextBaseJavaModule implements Application.ActivityLifecycleCallbacks {
//[...]
private ReactApplicationContext reactContext;
//[...]
public ChangeIconModule(ReactApplicationContext reactContext, String packageName) {
//[...]
this.reactContext = reactContext;
}
}
continues... When we change the icon on Android, the application closes. Can you get your hands on it as soon as possible?
Hey guys! I had this issue when I used version 5. I turned back to 4 and it worked fine!
Hello, Same here :-(
Hello, everyone. I applied a patch to the changeIcon method to remove the activity.finish() which was causing the app to close. Now changes only apply when you leave the app context though. I also removed the .MainActivityDefault shenanigans as it is causing double app launcher issues. React Native doesn't seem to like it when only aliases have the MAIN and LAUNCHER intents. So doing this allows to launch the Main Activity by default.
here is my modified version of the changeIcon method (i'm using patch package but as the repo seems stale maybe someone could take the maintenance back).
public void changeIcon(String iconName, Promise promise) {
final Activity activity = getCurrentActivity();
if (activity == null) {
promise.reject("ANDROID:ACTIVITY_NOT_FOUND");
return;
}
// Define MainActivity as default icon class
final String mainActivityClass = this.packageName + ".MainActivity";
// handling bad icon names
final String activeClass = (iconName == null || iconName.isEmpty())
? mainActivityClass
: this.packageName + ".MainActivity" + iconName;
// handling icon already in use
if (this.componentClass.equals(activeClass)) {
promise.reject("ANDROID:ICON_ALREADY_USED");
return;
}
try {
// activate new icon
activity.getPackageManager().setComponentEnabledSetting(
new ComponentName(this.packageName, activeClass),
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP
);
promise.resolve(iconName);
} catch (Exception e) {
promise.reject("ANDROID:ICON_INVALID");
return;
}
}
i've tried your solution @SHugzaurus but I've noticed that changing the icon now leads to the duplication of the app on the device. This seems to occur because the app creates a new instance whenever a new icon is activated without properly disabling the old one. As a result, both icons coexist, causing the duplication issue.
The best way I found was to patch ChangeIconModule, after
activity.finish();
in thechangeIcon
method, creating a new Intent:Intent newIconIntent = Intent.makeMainActivity(new ComponentName(this.packageName, activeClass)); newIconIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); this.reactContext.startActivity(newIconIntent);
This will swiftly open the new activity after the old one ends. You'll also need to store the react context in the constructor:
public class ChangeIconModule extends ReactContextBaseJavaModule implements Application.ActivityLifecycleCallbacks { //[...] private ReactApplicationContext reactContext; //[...] public ChangeIconModule(ReactApplicationContext reactContext, String packageName) { //[...] this.reactContext = reactContext; } }
Hi, I tried it and it works pretty well, but I have another problem with createRef in React Native not being recreated when I change the app icon
The best way I found was to patch ChangeIconModule, after
activity.finish();
in thechangeIcon
method, creating a new Intent:Intent newIconIntent = Intent.makeMainActivity(new ComponentName(this.packageName, activeClass)); newIconIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); this.reactContext.startActivity(newIconIntent);
This will swiftly open the new activity after the old one ends. You'll also need to store the react context in the constructor:
public class ChangeIconModule extends ReactContextBaseJavaModule implements Application.ActivityLifecycleCallbacks { //[...] private ReactApplicationContext reactContext; //[...] public ChangeIconModule(ReactApplicationContext reactContext, String packageName) { //[...] this.reactContext = reactContext; } }
Hi, I tried it and it works pretty well, but I have another problem with createRef in React Native not being recreated when I change the app icon
Can you give the full file?
Platform
Description This is such an obvious error. Changing the app icon on Android will shut down the process. I made a new project and tried it. But it was the same Please share the sample project repository that the app icon changes normally
To Reproduce Steps to reproduce the behavior:
How to Use
changeIcon
on Android.Expected behavior The app will not shut down and only the icon will change.
Screenshots Don't have to attach this.
Device (please complete the following information):
Versions
Code Snippet