마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

부팅시 자동실행하는 앱 만드려는데 안됩니다.

0 추천

SDK는 API level 30, android studio version 4.2.1 사용중입니다.

 

기기 부팅시 자동실행하는 서비스를 만드려고 합니다.

 

AndroidManifest.xml에 activity로는 MainActivity, Service로는 TempService, Broadcast reveiver로는 BootReceiver를 등록했습니다.

부팅시에 BootReceiver가 BOOT_COMPLETE 메시지를 받아서 TempService를 시작하려고 합니다. MainActivity는 필요시에 TempService에서 불러 사용하려 합니다.

 

AndroidManifest.xml 파일 내용입니다.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="land.incom">

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.AutoStart">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <receiver android:name=".BootReceiver"
            android:enabled="true" android:exported="false">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
        </receiver>

        <service
            android:name=".TempService"
            tools:ignore="MissingClass" />


    </application>

</manifest>

 

BootReceiver.java 입니다.

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Build;

public class BootReceiver extends BroadcastReceiver {
    @Override public void onReceive(Context context, Intent intent) {
        if(intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {
            Intent it = new Intent(context, TempService.class);
            it.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                context.startForegroundService(it);
            }
            else {
                context.startService(it);
            }
        }
    }
}

 

TempService.java입니다.

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;

public class TempService extends Service {

    @Override
    public IBinder onBind(Intent intent) {
        throw new UnsupportedOperationException("Prepare to service.");
    }
}

 

AutoStart.java 입니다.

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button button = findViewById(R.id.button);

        button.setOnClickListener( view -> {
            System.exit(0);
        });

        startService();
    }

    public void startService() {
        Intent intent = new Intent(this, TempService.class);
        startService(intent);
    }
}

 

MainActivity를 실행시키면 TempService가 실행되는 것은 확인했습니다.

다만 원래 목적인 부팅시에 TempService가 실행되지를 않습니다.

안드로이드 앱 만들기에 갓 입문한 초보자이고, 아직 google play 개발자 등록은 안했습니다.

안드로이드 스튜디오에서 키를 만들어서 app-release.apk를 만들어서 설치해도 부팅시에는 서비스를 시작하지 않는 것 같습니다.

 

도움 주시면 고맙겠습니다.

nkdpop (580 포인트) 님이 2021년 7월 12일 질문
nkdpop님이 2021년 7월 12일 수정

1개의 답변

0 추천
Serivce가 실행은 될 것 같은데 아무 동작도 안하도록 되어 있는 것 같네요.

https://developer.android.com/guide/components/services

위의 개발자 가이드를 참고하셔서 onCreate(), onStartCommand() 등의 메소드를 구현해 보세요.

디버거를 돌리시거나 해당 메소드에 로그를 찍어서 확인해 보세요.
spark (227,830 포인트) 님이 2021년 7월 12일 답변
서비스할 것은 앞으로 추가할 예정입니다. 문제는 안드로이드 부팅시에 섭비스가 시작되지 않는 것으로 보인다는 점입니다. MainActivity를 실행하고 실행 중인 서비스를 검색하면 AutoStart가 있습니다. 그러나 재 부팅하고나서 보면 실행 중인 서비스에 AutoStart는 없습니다.
...