Add option to force-stop app before starting

The previous commit introduced:

    scrcpy --start-app=name

By adding a '+' prefix, the app is stopped beforehand:

    scrcpy --start-app=+name

This may be useful to start a fresh app on a new virtual display:

    scrcpy --new-display --start-app=+org.mozilla.firefox

PR #5370 <https://github.com/Genymobile/scrcpy/pull/5370>
This commit is contained in:
Romain Vimont 2024-10-19 19:01:54 +02:00
parent 13ce277e1f
commit dd20efa41c
4 changed files with 17 additions and 3 deletions

View File

@ -498,6 +498,10 @@ Default is "lalt,lsuper" (left-Alt or left-Super).
.BI "\-\-start\-app " name
Start an Android app, by its exact package name.
Add a '+' prefix to force-stop before starting the app:
scrcpy --new-display --start-app=+org.mozilla.firefox
.TP
.B \-t, \-\-show\-touches
Enable "show touches" on start, restore the initial value on exit.

View File

@ -811,7 +811,9 @@ static const struct sc_option options[] = {
.longopt_id = OPT_START_APP,
.longopt = "start-app",
.argdesc = "name",
.text = "Start an Android app, by its exact package name.",
.text = "Start an Android app, by its exact package name.\n"
"Add a '+' prefix to force-stop before starting the app:\n"
" scrcpy --new-display --start-app=+org.mozilla.firefox",
},
{
.shortopt = 't',

View File

@ -594,6 +594,11 @@ public class Controller implements AsyncProcessor, VirtualDisplayListener {
}
private void startApp(String name) {
boolean forceStopBeforeStart = name.startsWith("+");
if (forceStopBeforeStart) {
name = name.substring(1);
}
DeviceApp app = Device.findByPackageName(name);
if (app == null) {
Ln.w("No app found for package \"" + name + "\"");
@ -607,7 +612,7 @@ public class Controller implements AsyncProcessor, VirtualDisplayListener {
}
Ln.i("Starting app \"" + app.getName() + "\" [" + app.getPackageName() + "] on display " + startAppDisplayId + "...");
Device.startApp(app.getPackageName(), startAppDisplayId);
Device.startApp(app.getPackageName(), startAppDisplayId, forceStopBeforeStart);
}
private int getStartAppDisplayId() {

View File

@ -264,7 +264,7 @@ public final class Device {
return null;
}
public static void startApp(String packageName, int displayId) {
public static void startApp(String packageName, int displayId, boolean forceStop) {
PackageManager pm = FakeContext.get().getPackageManager();
Intent launchIntent = getLaunchIntent(pm, packageName);
@ -283,6 +283,9 @@ public final class Device {
}
ActivityManager am = ServiceManager.getActivityManager();
if (forceStop) {
am.forceStopPackage(packageName);
}
am.startActivity(launchIntent, options);
}
}