>Java >java지도 시간 >부팅 시 Android 서비스가 시작되지 않는 이유는 무엇입니까?

부팅 시 Android 서비스가 시작되지 않는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-12 20:42:18764검색

Why Isn't My Android Service Starting on Boot?

Android 부팅에서 서비스 시작

Android OS 부팅 시 서비스를 자동으로 시작하려면 올바른 구성을 구현하는 것이 중요합니다. 모든 것이 올바르게 설정된 것처럼 보이지만 원하는 동작을 방해하는 근본적인 문제가 있을 수 있습니다.

Android 매니페스트

제공된 Android 매니페스트를 검토하세요.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.phx.batterylogger"
  android:versionCode="1"
  android:versionName="1.0"
  android:installLocation="internalOnly">

<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.BATTERY_STATS" />

<application android:icon="@drawable/icon" android:label="@string/app_name">
    <service android:name=".BatteryLogger"/>
    <receiver android:name=".StartupIntentReceiver">  
        <intent-filter>  
            <action android:name="android.intent.action.BOOT_COMPLETED" />  
        </intent-filter>  
    </receiver>
</application>

</manifest>

BOOT_COMPLETED 작업이 IntentReceiver.

BroadcastReceiver for Startup

다음으로 StartupIntentReceiver를 확인하세요.

package com.phx.batterylogger;

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

public class StartupIntentReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Intent serviceIntent = new Intent(context, BatteryLogger.class);
        context.startService(serviceIntent);
    }
}

이 수신기는 BOOT_COMPLETED 작업을 수신하고 시작해야 합니다. 원하는 서비스.

문제 해결

부팅 시 서비스가 시작되지 않는 경우 다음 단계를 고려하십시오.

  • 로그에 수신기가 BOOT_COMPLETED 브로드캐스트를 수신 중입니다.
  • 대상 서비스가 올바르게 선언되었는지 확인하고 매니페스트에서 구성됩니다.
  • 대상 서비스가 시스템에 의해 비활성화되거나 최적화되지 않았는지 확인하세요.
  • 다음에서 서비스를 시작하려면 Context.startForegroundService(Intentintent, intnotificationId) API 사용을 고려하세요. 전경(API 레벨 26 및 위).

전체 예

AutoStart 애플리케이션의 전체 예를 보려면 다음 코드를 참조하세요. 조각:

AndroidManifest

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="pack.saltriver" android:versionCode="1" android:versionName="1.0">

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

    <application android:icon="@drawable/icon" android:label="@string/app_name">

        <receiver android:name=".autostart">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>

        <activity android:name=".hello"></activity>
        <service android:enabled="true" android:name=".service" />
    </application>
</manifest>

autostart.java

public class autostart extends BroadcastReceiver 
{
    public void onReceive(Context context, Intent arg1) 
    {
        Intent intent = new Intent(context,service.class);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            context.startForegroundService(intent);
        } else {
            context.startService(intent);
        }
        Log.i("Autostart", "started");
    }
}

service.java

public class service extends Service
{
    private static final String TAG = "MyService";
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
    public void onDestroy() {
        Toast.makeText(this, "My Service Stopped", Toast.LENGTH_LONG).show();
        Log.d(TAG, "onDestroy");
    }

    @Override
    public void onStart(Intent intent, int startid)
    {
        Intent intents = new Intent(getBaseContext(),hello.class);
        intents.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intents);
        Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show();
        Log.d(TAG, "onStart");
    }
}

hello.java

public class hello extends Activity 
{   
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Toast.makeText(getBaseContext(), "Hello........", Toast.LENGTH_LONG).show();
    }
}

구현 이러한 단계를 철저하게 수행하면 OS 부팅 시 Android 서비스가 성공적으로 시작됩니다.

위 내용은 부팅 시 Android 서비스가 시작되지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.