기본 활동없이 Android 애플리케이션을 시작하고 애플리케이션 시작시 서비스 시작


91

내 응용 프로그램에 다음 시나리오가 있습니다. 내 응용 프로그램에 UI가 없습니다. 대신 부팅시 시작되고 계속 실행되는 서비스가 있습니다.

기본 활동없이 매니페스트 파일을 구성하려면 어떻게해야합니까? 활동없이 내 앱을 실행할 수 있습니까? 내 앱을 시작하면 내 서비스가 시작됩니다. 이것이 가능한가?

서비스를 시작하기 위해 반투명 활동을 만들고 싶지 않습니다.


답변:


125

반투명 활동을 사용하고 싶지 않다고 말했지만 이것이 가장 좋은 방법 인 것 같습니다.

  1. 매니페스트에서 활동 테마를로 설정합니다 Theme.Translucent.NoTitleBar.
  2. 활동에 대한 레이아웃에 신경 쓰지 말고을 호출하지 마십시오 setContentView().
  3. 활동의 onCreate()에서 startService().
  4. finish()서비스를 시작한 후 활동을 종료하십시오 .

즉, 활동이 표시되지 않아도됩니다. 서비스가 실행 중인지 확인한 다음 종료 할 수 있습니다. 원하는대로 들립니다.

서비스를 시작 중이거나 이미 실행 중임을 사용자에게 알리는 알림 을 적어도 표시하는 것이 좋습니다 . 실행기 아이콘을 누를 때 아무것도하지 않는 것처럼 보이는 것은 매우 나쁜 사용자 경험입니다.


2
그것은 ... 내 application.which SHD는 경우가 아닐 실행 한 후 나에게 빈 화면을 제공합니다
Meher 럼주

1
@meher 방금 테스트했는데 완벽하게 작동했습니다. 내 서비스가 시작되었고 한순간도 활동을 보지 못했습니다. 활동의 onCreate () 콘텐츠를 게시 해 주시면 문제를 해결할 수있을 것입니다.
DARSHAN Rivka 깍는

처음으로 응용 프로그램을 설치했을 때 활동이 시작되고 사라지는 것을 볼 수 있습니다.
Meher 럼주

Public class TestActivity extends Activity {/ ** 활동이 처음 생성 될 때 호출됩니다. * / @Override public void onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState); Log.i ( "활동", "서비스 시작"); startService (new Intent (TestActivity.this, MyService.class)); 끝(); }}
Meher 럼주

1
나는 이것이 오래된 질문이라는 것을 알고 있지만 더 이상 작동하지 않는 것 같습니다. 기본 활동 테마를 Theme.Translucent.NoTitleBar 또는 Theme.Translucent.NoTitleBar.FullScreen으로 변경하면 활동 화면을 항상 "응용 프로그램이 응답하지 않음"메시지를 발생시키는 것으로 잠깐 표시하는 작동중인 응용 프로그램이 발생합니다.
alzee

33

예 , 애플리케이션이 부팅 될 때 BroadcastReceiver호출 하는 을 생성하여 수행 할 수 있습니다 Service. 여기에 내가 준 완전한 대답이 있습니다.
Android-부팅시 서비스 시작

응용 프로그램에 대한 아이콘 / 실행기를 원하지 않는 경우에도 그렇게 할 수 있습니다.

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

Service정상적으로 선언 된대로 선언하십시오 .


2
asker가 Service부팅시 시작해도 괜찮은 것처럼 들리지만 main이없는 방법을 알고 싶어 Activity하지만 Service런처 아이콘을 눌렀을 때 실행 중인지 확인하기 만하면 됩니다.
DARSHAN Rivka 깍는

2
그러나 눌렀을 때 서비스가 실행되고 있는지 확인하는 실행기 아이콘을 원하는 것처럼 들립니다. 귀하의 제안은 단순히 런처 아이콘을 제거합니다.
DARSHAN Rivka 깍는

@LalitPoptani 솔루션은 괜찮지 만 내 전화를 부팅 할 때까지 내 서비스가 시작되지 않습니다.
Meher 럼주

4
SyncAdapter를 제외하고 AndroidMenifest.xml에서 MAIN, LAUNCHER없이 앱을 시작할 수 없습니다. 당신의 대답이 정말 사실입니까?
sunghun

1
작업 및 카테고리 태그가있는 인 텐트 필터를 제거했습니다. 이제 앱이 더 이상 안드로이드 스튜디오에서 실행되지 않습니다
Nauman Ash

12

활동이나 서비스가없는 앱을 만드는 이유는 시작할 필요가없는 홈 화면 위젯 앱을 만들기 때문일 수 있습니다.
프로젝트를 시작하면 활동을 생성하지 마십시오. 프로젝트를 만든 후 실행을 누르십시오. Android 스튜디오에서 No default activity found. 구성 편집 ( 실행 메뉴에서)을

클릭 하고 실행 옵션 부분에서 실행 값을 Nothing으로 설정하십시오 . 그런 다음 확인을 클릭하고 앱을 실행하십시오.

( 런처 활동이 없으므로 앱 메뉴에 앱이 표시되지 않습니다. )


2
고마워요, 그게 바로 제 경우였습니다. 내가했던 것처럼 구성 편집이 표시되지 않는 경우 주 메뉴에서 실행> 실행 ... 을 선택한 다음 구성 편집 ... 을 선택합니다 .
pm_

6

Android Studio 버전 2.3

몇 가지 간단한 단계를 따라 주 활동없이 서비스를 만들 수 있습니다. Android Studio를 통해이 앱을 설치하고 일반 앱처럼 디버그 할 수 있습니다.

먼저 Android Studio에서 활동없이 프로젝트를 만듭니다. 그런 다음 서비스 클래스를 만들고 AndroidManifest.xml에 서비스를 추가합니다.

<application android:allowBackup="true"
    android:label="@string/app_name"
    android:icon="@mipmap/ic_launcher"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <service android:name="com.whatever.myservice.MyService">
        <intent-filter>
            <action android:name="com.whatever.myservice.MyService" />
        </intent-filter>
    </service>
</application>

이제 "실행"버튼 (녹색 화살표) 옆의 드롭 다운에서 "구성 편집"으로 이동하고 "실행 옵션"에서 "없음"을 선택합니다. 이를 통해 Android Studio가 Main Activity가 없다고 불평하지 않고 서비스를 설치할 수 있습니다.

일단 설치되면 서비스는 실행되지 않지만 다음 adb 쉘 명령으로 시작할 수 있습니다.

am startservice -n com.whatever.myservice/.MyService

실행 중인지 확인할 수 있습니다 ...

ps | grep whatever

아직 시도하지 않았지만 Android Studio에서 자동으로 서비스를 시작하도록 할 수 있습니다. 이것은 "구성 편집"메뉴에서 수행됩니다.


adb 셸에서 다음과 같은 오류가 발생합니다. 서비스 시작 : Intent {cmp = com.example.wolk.myapp / .MyIntentService} 오류 : 찾을 수 없음; 서비스가 시작되지 않았습니다. 로그 캣 쇼 : ActivityManager가 : 서비스 정보 부 (ServiceInfo)을 시작하는 것을 허용하지 않습니다 {274d8af com.example.wolk.myapp.MyIntentService
Trismegistos
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.