Skip to content

Commit 359975b

Browse files
authored
Merge pull request #3262 from kengoon/foreground-type
Add foregroundServiceType support to AndroidManifest templates
2 parents c67d5bd + 1b15708 commit 359975b

File tree

7 files changed

+41
-10
lines changed

7 files changed

+41
-10
lines changed

doc/source/services.rst

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,15 @@ The ``PATH_TO_SERVICE_PY`` is the relative path to the service entry point (like
6464
You can optionally specify the following parameters:
6565
- :code:`:foreground` for launching a service as an Android foreground service
6666
- :code:`:sticky` for launching a service that gets restarted by the Android OS on exit/error
67+
- :code:`:foregroundServiceType=TYPE` to specify the type of foreground service,
68+
where TYPE is one of the valid Android foreground service types
69+
(see `Android documentation <https://developer.android.com/develop/background-work/services/fgs/service-types>`__
70+
for more details). You can specify multiple types separated by a pipe
71+
character "|", e.g. :code:`:foregroundServiceType=location|mediaPlayback`. Mandatory
72+
if :code:`:foreground` is used on Android 14+.
6773
6874
Full command with all the optional parameters included would be:
69-
:code:`--service=myservice:services/myservice.py:foreground:sticky`
75+
:code:`--service=myservice:services/myservice.py:foreground:sticky:foregroundServiceType=location`
7076

7177
You can add multiple
7278
:code:`--service` arguments to include multiple services, or separate

pythonforandroid/bootstraps/_sdl_common/build/templates/AndroidManifest.tmpl.xml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,8 +115,11 @@
115115
<service android:name="{{ args.service_class_name }}"
116116
android:process=":pythonservice" />
117117
{% endif %}
118-
{% for name in service_names %}
118+
{% for name, foreground_type in service_data %}
119119
<service android:name="{{ args.package }}.Service{{ name|capitalize }}"
120+
{% if foreground_type %}
121+
android:foregroundServiceType="{{ foreground_type }}"
122+
{% endif %}
120123
android:process=":service_{{ name }}" />
121124
{% endfor %}
122125
{% for name in native_services %}

pythonforandroid/bootstraps/common/build/build.py

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -466,7 +466,7 @@ def make_package(args):
466466
if exists(service_main) or exists(service_main + 'o'):
467467
service = True
468468

469-
service_names = []
469+
service_data = []
470470
base_service_class = args.service_class_name.split('.')[-1]
471471
for sid, spec in enumerate(args.services):
472472
spec = spec.split(':')
@@ -476,8 +476,18 @@ def make_package(args):
476476

477477
foreground = 'foreground' in options
478478
sticky = 'sticky' in options
479+
foreground_type_option = next((s for s in options if s.startswith('foregroundServiceType')), None)
480+
foreground_type = None
481+
if foreground_type_option:
482+
parts = foreground_type_option.split('=', 1)
483+
if len(parts) != 2 or not parts[1]:
484+
raise ValueError(
485+
'Missing value for `foregroundServiceType` option. '
486+
'Expected format: foregroundServiceType=location'
487+
)
488+
foreground_type = parts[1]
479489

480-
service_names.append(name)
490+
service_data.append((name, foreground_type))
481491
service_target_path =\
482492
'src/main/java/{}/Service{}.java'.format(
483493
args.package.replace(".", "/"),
@@ -541,10 +551,10 @@ def make_package(args):
541551
render_args = {
542552
"args": args,
543553
"service": service,
544-
"service_names": service_names,
554+
"service_data": service_data,
545555
"android_api": android_api,
546556
"debug": "debug" in args.build_mode,
547-
"native_services": args.native_services
557+
"native_services": args.native_services,
548558
}
549559
if is_sdl_bootstrap():
550560
render_args["url_scheme"] = url_scheme

pythonforandroid/bootstraps/qt/build/templates/AndroidManifest.tmpl.xml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,11 @@
9191
<service android:name="{{ args.service_class_name }}"
9292
android:process=":pythonservice" />
9393
{% endif %}
94-
{% for name in service_names %}
94+
{% for name, foreground_type in service_data %}
9595
<service android:name="{{ args.package }}.Service{{ name|capitalize }}"
96+
{% if foreground_type %}
97+
android:foregroundServiceType="{{ foreground_type }}"
98+
{% endif %}
9699
android:process=":service_{{ name }}" />
97100
{% endfor %}
98101
{% for name in native_services %}

pythonforandroid/bootstraps/service_library/build/templates/AndroidManifest.tmpl.xml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,11 @@
77
<uses-sdk android:minSdkVersion="{{ args.min_sdk_version }}" android:targetSdkVersion="{{ android_api }}" />
88

99
<application {% if debug %}android:debuggable="true"{% endif %} >
10-
{% for name in service_names %}
10+
{% for name, foreground_type in service_data %}
1111
<service android:name="{{ args.package }}.Service{{ name|capitalize }}"
12+
{% if foreground_type %}
13+
android:foregroundServiceType="{{ foreground_type }}"
14+
{% endif %}
1215
android:process=":service_{{ name }}"
1316
android:exported="true" />
1417
{% endfor %}

pythonforandroid/bootstraps/service_only/build/templates/AndroidManifest.tmpl.xml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,11 @@
7272
android:process=":pythonservice"
7373
android:exported="true"/>
7474
{% endif %}
75-
{% for name in service_names %}
75+
{% for name, foreground_type in service_data %}
7676
<service android:name="{{ args.package }}.Service{{ name|capitalize }}"
77+
{% if foreground_type %}
78+
android:foregroundServiceType="{{ foreground_type }}"
79+
{% endif %}
7780
android:process=":service_{{ name }}"
7881
android:exported="true" />
7982
{% endfor %}

pythonforandroid/bootstraps/webview/build/templates/AndroidManifest.tmpl.xml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,11 @@
8181
<service android:name="org.kivy.android.PythonService"
8282
android:process=":pythonservice" />
8383
{% endif %}
84-
{% for name in service_names %}
84+
{% for name, foreground_type in service_data %}
8585
<service android:name="{{ args.package }}.Service{{ name|capitalize }}"
86+
{% if foreground_type %}
87+
android:foregroundServiceType="{{ foreground_type }}"
88+
{% endif %}
8689
android:process=":service_{{ name }}" />
8790
{% endfor %}
8891

0 commit comments

Comments
 (0)