Search code examples
androidpythonkivybuildozer

How to prevent app from closing on background?


Every android app I build on kivy with buildozer restarts itself after being in the background. Even if I slide down the notifications when on the app the app restarts.

I tried finding documentation about this issue but didn't find anything.


from kivy.app import App
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
import time
Builder.load_string('''
<CameraClick>:
    orientation: 'vertical'
    Camera:
        id: camera
        resolution: (640, 480)
        play: False
    ToggleButton:
        text: 'Play'
        on_press: camera.play = not camera.play
        size_hint_y: None
        height: '48dp'
    Button:
        text: 'Capture'
        size_hint_y: None
        height: '48dp'
        on_press: root.capture()
''')


class CameraClick(BoxLayout):
    def capture(self):
        '''
        Function to capture the images and give them the names
        according to their captured time and date.
        '''
        camera = self.ids['camera']
        timestr = time.strftime("%Y%m%d_%H%M%S")
        camera.export_to_png("IMG_{}.png".format(timestr))
        print("Captured")


class TestCamera(App):

    def build(self):
        return CameraClick()


TestCamera().run()

This is the app I'm trying to run, with a default buildozer.spec only adding opencv for the camera.


Solution

  • from kivy.app import App
    from kivy.lang import Builder
    from kivy.uix.boxlayout import BoxLayout
    import time
    Builder.load_string('''
    <CameraClick>:
        orientation: 'vertical'
        Camera:
            id: camera
            resolution: (640, 480)
            play: False
        ToggleButton:
            text: 'Play'
            on_press: camera.play = not camera.play
            size_hint_y: None
            height: '48dp'
        Button:
            text: 'Capture'
            size_hint_y: None
            height: '48dp'
            on_press: root.capture()
    ''')
    
    
    class CameraClick(BoxLayout):
        def capture(self):
            '''
            Function to capture the images and give them the names
            according to their captured time and date.
            '''
            camera = self.ids['camera']
            timestr = time.strftime("%Y%m%d_%H%M%S")
            camera.export_to_png("IMG_{}.png".format(timestr))
            print("Captured")
    
    
    class TestCamera(App):
    
        def build(self):
            return CameraClick()
    
        def on_pause(self): 
            return True
    
    
    TestCamera().run()
    

    Changing the on_pause method solves it.