답변:
먼저, 당신은 당신의 권한이 필요합니다 AndroidManifest.xml
:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
또한에서 AndroidManifest.xml
서비스를 정의하고 BOOT_COMPLETED 작업을 수신하십시오 .
<service android:name=".MyService" android:label="My Service">
<intent-filter>
<action android:name="com.myapp.MyService" />
</intent-filter>
</service>
<receiver
android:name=".receiver.StartMyServiceAtBootReceiver"
android:label="StartMyServiceAtBootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
그런 다음 BOOT_COMPLETED 조치를 가져 오고 서비스를 시작할 수신자를 정의 해야합니다.
public class StartMyServiceAtBootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
Intent serviceIntent = new Intent(context, MyService.class);
context.startService(serviceIntent);
}
}
}
이제 전화가 시작될 때 서비스가 실행되고 있어야합니다.
Intent.ACTION_BOOT_COMPLETED
리시버에서 문자열을 하드 코딩하는 대신 사용 하는 것이 더 좋습니다 . 또한 인 Intent(context, MySystemService.class)
텐트를 만들 때 새 생성자를 사용해야합니다 .
Multiple markers at this line - BroadcastReceiver cannot be resolved to a type - The public type StartMyServiceAtBootReceiver must be defined in its own file
온 public class
라인. 어떤 아이디어?
이것은 안드로이드 장치 재부팅 후 활동을 시작하는 방법입니다 .
당신이 코드를 삽입 AndroidManifest.xml
내 파일 <application>
요소 ( 하지 내 <activity>
요소) :
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<receiver
android:enabled="true"
android:exported="true"
android:name="yourpackage.yourActivityRunOnStartup"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
그런 다음 매니페스트 의 요소에 지정된 것과 yourActivityRunOnStartup
일치 하는 새 클래스를 만듭니다 .android:name
<receiver>
package yourpackage;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class yourActivityRunOnStartup extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
Intent i = new Intent(context, MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
}
참고 : i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
활동은 활동 외부의 컨텍스트에서 시작되므로 호출 이 중요합니다. 이것이 없으면 활동이 시작되지 않습니다.
또한, 값 android:enabled
, android:exported
및 android:permission
의 <receiver>
태그는 필수 보이지 않는다. 앱은 이러한 값없이 이벤트를받습니다. 여기 의 예를 참조 하십시오 .
Application
? 아마 안에 onCreate()
?
onReceive()
의BroadcastReceiver
ACTION_BOOT_COMPLETE을 (를) 청취하고 필요한 작업을 수행하십시오. 여기에 코드 스 니펫이 있습니다.
최신 정보:
답변에 대한 원래 링크가 다운되었으므로 주석을 기반으로 링크가 다운되었을 때 아무도 코드를 놓치지 않기 때문에 링크 된 코드입니다.
AndroidManifest.xml (application-part)에서 :
<receiver android:enabled="true" android:name=".BootUpReceiver"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
...
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
...
public class BootUpReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Intent i = new Intent(context, MyActivity.class); //MyActivity can be anything which you want to start on bootup...
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
이 질문에 며칠 동안 직면 한 점을 추가하고 싶습니다. 나는 모든 대답을 시도했지만 그게 효과가 없었습니다. Android 버전 5.1을 사용중인 경우이 설정을 변경하십시오.
Android 버전 5.1을 사용하는 경우 앱 설정에서 (시작 제한)을 선택 해제해야합니다.
설정> 앱> 앱> 실행 제한 (선택 해제)
다른 접근 방식은 부팅 과정에서 속도 저하를 피하기 위해 android.intent.action.USER_PRESENT
대신에 사용하는 것입니다 android.intent.action.BOOT_COMPLETED
. 그러나 이것은 true
사용자가 잠금 화면을 활성화 한 경우 에만 해당 됩니다. 그렇지 않으면이 의도가 브로드 캐스트되지 않습니다.