장치 부팅시 서비스를 시작하는 방법 (자동 실행 앱 등)
먼저 : Android 3.1 이상 버전 이후로 사용자가 앱을 한 번 이상 시작한 적이 없거나 "강제 종료"응용 프로그램을 사용하면 BOOT_COMPLETE를받지 못합니다. 이것은 맬웨어가 자동으로 서비스를 등록하는 것을 방지하기 위해 수행되었습니다. 이 보안 허점은 최신 버전의 Android에서 닫혔습니다.
해결책:
활동이있는 앱을 만듭니다. 사용자가 한번 실행하면 앱은 BOOT_COMPLETE 브로드 캐스트 메시지를 수신 할 수 있습니다.
두 번째로 : 외부 저장소를 마운트하기 전에 BOOT_COMPLETE가 전송됩니다. 앱이 외부 저장소에 설치되어 있으면 BOOT_COMPLETE 브로드 캐스트 메시지가 수신되지 않습니다.
이 경우 두 가지 해결책이 있습니다.
- 내부 저장소에 앱 설치
- 내부 저장소에 다른 작은 앱을 설치하십시오. 이 앱은 BOOT_COMPLETE를 수신하고 외부 저장소에서 두 번째 앱을 실행합니다.
앱이 이미 내부 저장소에 설치된 경우 아래 코드를 사용하면 장치 부팅시 서비스를 시작하는 방법을 이해할 수 있습니다.
Manifest.xml에서
허가:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
BOOT_COMPLETED 리시버를 등록하십시오.
<receiver android:name="org.yourapp.OnBoot">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
서비스를 등록하십시오 :
<service android:name="org.yourapp.YourCoolService" />
수신기 OnBoot.java에서 :
public class OnBoot extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
// Create Intent
Intent serviceIntent = new Intent(context, YourCoolService.class);
// Start service
context.startService(serviceIntent);
}
}
장치가 RECEIVE_BOOT_COMPLETED를 잡지 않으면 HTC의 경우 Manifest 에이 코드를 추가해야 할 수도 있습니다.
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
수신자는 이제 다음과 같이 보입니다 :
<receiver android:name="org.yourapp.OnBoot">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
</intent-filter>
</receiver>
재시작 에뮬레이터 또는 실제 장치없이 BOOT_COMPLETED를 테스트하는 방법은 무엇입니까? 그것은 간단합니다. 이 시도:
adb -s device-or-emulator-id shell am broadcast -a android.intent.action.BOOT_COMPLETED
장치 ID를 얻는 방법? ID가있는 연결된 장치 목록을 가져옵니다.
adb devices
ADT의 adb는 기본적으로 다음에서 찾을 수 있습니다.
adt-installation-dir/sdk/platform-tools
즐겨! )