안드로이드에서 전화가 시작될 때 앱을 시작하려면 어떻게 해야 합니까?
이 튜토리얼에서 샘플 코드를 사용해봤지만 오래된 것 같고 작동하지 않았습니다.그렇다면 안드로이드 부팅이 완료되면 앱을 자동으로 시작하려면 어떤 변경 사항과 어떤 파일을 변경해야 합니까?
먼저, 당신은 당신의 허락이 필요합니다.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);
}
}
}
이제 전화가 시작될 때 서비스가 실행되고 있어야 합니다.
다음은 Android 장치 재부팅 후 활동 실행을 시작하는 방법입니다.
이 코드를 에 삽입합니다.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>태그는 필수 사항이 아닌 것 같습니다.앱은 이러한 값이 없는 이벤트를 수신합니다.여기 예를 참조하십시오.
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);
}
}
출처: https://web.archive.org/web/20150520124552/http ://www.androidsnippets.com/autostart-an-application-at-bootup
또한 코드를 수정하고 싶지 않은 경우 자동 시작과 같은 앱을 사용하여 시작 시 안드로이드 애플리케이션을 실행할 수 있습니다.자동 시작 - 루트 없음
Android 10의 경우 배경 제한이 있습니다.
Android 10 및 모든 버전의 Android의 경우 재시작 후 앱을 시작하거나 모바일을 켜려면 다음 단계를 따릅니다.
Android Manifest에서 이 두 가지 권한 추가
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
응용프로그램 태그에 추가
<receiver
android:name=".BootReciever"
android:enabled="true"
android:exported="true"
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>
부팅 시 활동을 시작하기 위해 이 클래스 추가
public class BootReciever extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (Objects.equals(intent.getAction(), Intent.ACTION_BOOT_COMPLETED)) {
Intent i = new Intent(context, SplashActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}}
Android 10에 대한 Draw 오버레이 권한이 필요합니다.
그래서 이것을 당신의 첫 활동에 추가합니다.
private fun requestPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (!Settings.canDrawOverlays(this)) {
val intent = Intent(
Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + this.packageName)
)
startActivityForResult(intent, 232)
} else {
//Permission Granted-System will work
}
}
}
션의 솔루션은 처음에는 저에게 효과가 없었습니다(Android 4.2.2).저는 동일한 Android 프로젝트에 더미 작업을 추가하고 해당 작업을 장치에서 한 번 이상 수동으로 실행해야 했습니다.그런 다음 Sean의 솔루션이 작동하기 시작했고 이후 재부팅 후 BroadcastReceiver에 알림이 표시되었습니다.
사용자의 Float 사용경다우파만일있라는 이름의 할 수 .MainActivityReceiver.kt패키지 폴더에 있습니다.예를 들면android/app/src/main/kotlin/com/your_company/package.
MainActivityReceiver.kt:
package com.your_company.package
import android.content.BroadcastReceiver
import android.content.Context;
import android.content.Intent;
class MainActivityReceiver: BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
if (intent.action == Intent.ACTION_BOOT_COMPLETED) {
val i = Intent(context, MainActivity::class.java)
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
context.startActivity(i)
}
}
}
를 합니다.AndroidManifest.xmlfile은 첫번째 답변을 참조합니다.

저는 이 질문에서 제가 며칠 동안 직면했던 한 가지 점을 추가하고 싶습니다.나는 모든 답을 시도했지만 그것들은 나에게 효과가 없었습니다.안드로이드 버전 5.1을 사용하는 경우 이 설정을 변경하십시오.
안드로이드 버전 5.1을 사용하는 경우 앱 설정에서 (실행 제한)을 선택 취소해야 합니다.
settings > app > 본인의 app > 실행 제한 (선택 취소)
은 또다접방은식을 하는 것입니다.android.intent.action.USER_PRESENT에 android.intent.action.BOOT_COMPLETED부팅 프로세스 중에 느린 다운을 방지할 수 있습니다.하지만 이것은 단지true사용자가 화면 잠금을 활성화한 경우 - 그렇지 않으면 이 의도는 브로드캐스트되지 않습니다.
레퍼런스 블로그 - Android의 ACTION_USER_PRESent Intent의 문제점
언급URL : https://stackoverflow.com/questions/6391902/how-do-i-start-my-app-when-the-phone-starts-on-android
'programing' 카테고리의 다른 글
| 특정 코드가 추가된 커밋을 확인하는 방법은 무엇입니까? (0) | 2023.09.05 |
|---|---|
| 하이브리드 웹 애플리케이션(MPA 및 SPA 결합)을 사용하는 방법 (0) | 2023.09.05 |
| C#을 사용하여 Oracle 데이터베이스에 BLOB 삽입 (0) | 2023.09.05 |
| URL 문자열을 구문 분석하여 키 값을 가져오는 가장 좋은 방법은 무엇입니까? (0) | 2023.09.05 |
| SMTP를 사용하여 Python에서 메일 보내기 (0) | 2023.09.05 |