メインアクティビティなしでAndroidアプリケーションを起動し、アプリケーションの起動時にサービスを開始します


90

アプリケーションに次のシナリオがあります。私のアプリケーションにはUIがありません。代わりに、起動時に開始され、継続的に実行されるサービスがあります。

メインアクティビティなしでマニフェストファイルを構成するにはどうすればよいですか?アクティビティなしでアプリを起動できますか?アプリを起動すると、サービスが開始されます。これは可能ですか?

サービスを開始するために半透明のアクティビティを作成したくありません。


これまでに見ている[質問] [1] [1]:stackoverflow.com/questions/4468006/...
Munishカプール

回答:


125

半透明のアクティビティを使用したくないとおっしゃっていましたが、これが最善の方法です。

  1. マニフェストで、アクティビティテーマをに設定しTheme.Translucent.NoTitleBarます。
  2. アクティビティのレイアウトを気にしたり、呼び出したりしないでくださいsetContentView()
  3. アクティビティでonCreate()、からサービスを開始しますstartService()
  4. finish()サービスを開始したら、アクティビティを終了します。

つまり、アクティビティは表示されている必要はありません。単にサービスが実行中であることを確認してから終了することができます。

少なくともToast通知を表示して、サービスを起動していること、またはサービスが既に実行中であることをユーザーに示すことを強くお勧めします。ランチャーアイコンを押しても何も実行されないように見えるのは、非常に悪いユーザーエクスペリエンスです。


2
アプリケーションを起動した後、空白の画面が表示されます。これは当てはまりません...
Meher

1
@meher私はそれをテストしましたが、それは私にとっては完璧に機能しました。アクティビティのonCreate()のコンテンツを投稿してください。問題を解決できます。
Darshan Rivka Whittle

アプリケーションを初めてインストールしたとき、アクティビティが起動され、2番目に消えるのを見ることができます。
Meher

パブリッククラスTestActivityはActivity {/ **アクティビティを最初に作成するときに呼び出されます。* / @Override public void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState); Log.i( "activity"、 "starting service"); startService(new Intent(TestActivity.this、MyService.class)); finish(); }}
Meher

1
これは古い質問ですが、機能していないようです。メインのアクティビティテーマをTheme.Translucent.NoTitleBarまたはTheme.Translucent.NoTitleBar.FullScreenに変更すると、アクティビティ画面が一時的に表示され、常に「アプリケーションが応答を停止しました」というメッセージが表示される、別の方法で機能するアプリケーションが発生します。
アルジー、2015

32

はい、アプリケーションの起動時にBroadcastReceiverを呼び出すを作成するだけでそれを行うことができますService。ここに私が与えた完全な答えがあります。
Android-起動時にサービスを開始

アプリケーションにアイコン/ランチャーが必要ない場合は、それも実行できます。アクティビティを作成しないでください

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

ちょうどあなたを宣言しService、通常宣言として。


2
Service起動時にonkerを起動すると、質問者は問題ないようですが、mainがない方法を知りたいActivityServiceですが、ランチャーアイコンが押されたときにが実行されていることを確認してください。
Darshan Rivka Whittle

2
しかし、押されたときにサービスが実行されていることを保証するランチャーアイコンが必要なようです。あなたの提案は単にランチャーアイコンを取り除きます。
Darshan Rivka Whittle

@LalitPoptaniソリューションは問題ありませんが、電話を起動するまでサービスが開始されません。
Meher

4
SyncAdapterを除いて、AndroidMenifest.xmlでMAIN、LAUNCHERなしではアプリを起動できません。あなたの答えは本当に正しいですか?
sunghun

1
アクションタグとカテゴリタグを含むインテントフィルターを削除しました。アプリがAndroidスタジオで実行されなくなった
Nauman Ash

11

アクティビティやサービスのないアプリを作成する理由は、起動する必要のないホームスクリーンウィジェットアプリを作成することである可能性があります。
プロジェクトを開始したら、アクティビティを作成しないでください。プロジェクトを作成したら、実行を実行します。Androidスタジオは言うでしょうNo default activity found

クリックして[設定の編集を(から実行メニュー)とで起動オプションパーツセット起動に値を何もありません。次に[OK]をクリックしてアプリを実行します。

ランチャーアクティビティがないため、[アプリ]メニューにアプリは表示されません。


ありがとう、それはまさに私の場合でした。[ 構成の編集 ]が表示されない場合は、メインメニューから[ 実行]> [実行... ]を選択し、次に[ 構成の編集... ]を選択します
pm_

6

Android Studioバージョン2.3

いくつかの簡単な手順に従って、メインアクティビティなしでサービスを作成できます。このアプリをAndroid Studioからインストールして、通常のアプリと同じようにデバッグできます。

まず、アクティビティなしでAndroid Studioでプロジェクトを作成します。次に、Serviceクラスを作成し、サービスを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が文句を言うことなく、サービスをインストールできます。

インストールすると、サービスは実行されませんが、このadbシェルコマンドでサービスを開始できます...

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

それが実行されていることを確認できます...

ps | grep whatever

まだ試していませんが、Android Studioで自動的にサービスを開始することもできます。これは、「構成の編集」メニューで行います。


adbシェルから次のエラーが表示されます:サービスの開始:Intent {cmp = com.example.wolk.myapp / .MyIntentService}エラー:見つかりません。サービスは開始されていません。LOGCATの表示:ActivityManager:ServiceInfo {274d8af com.example.wolk.myapp.MyIntentService
Trismegistos
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.