web-dev-qa-db-ja.com

開始Androidアクティビティのないアプリケーション

サービスとしてのみ実行することを目的とするアプリケーションがあります(インターフェイスはなく、バックグラウンドで実行するだけです)。 AndroidManifest.xmlに記載されているアクティビティはありませんが、電話の開始時にアプリケーションを開始するためのレシーバーを配置します。

<application
    Android:icon="@drawable/ic_launcher"
    Android:label="@string/app_name" >
    <service
        Android:enabled="true"
        Android:name=".MyAppService">
        <intent-filter>
            <action
                Android:name = "me.myapp.MyAppService">
            </action>
        </intent-filter>
    </service>
    <receiver
        Android:enabled="true"
        Android:name=".BootReceiver">
        <intent-filter>
            <action Android:name = "Android.intent.action.BOOT_COMPLETED"/>
        </intent-filter>
    </receiver>
</application>

問題は、(Eclipseを使用して)アプリケーションを開発しているときに、変更を頻繁にテストする必要があることです。 (電話をデバッグモードで接続して)アプリケーションを実行すると、次のようなメッセージが表示されます。

[2011-12-14 00:18:40 - MyApp] Android Launch!
[2011-12-14 00:18:40 - MyApp] adb is running normally.
[2011-12-14 00:18:40 - MyApp] No Launcher activity found!
[2011-12-14 00:18:40 - MyApp] The launch will only sync the application package on the device!
[2011-12-14 00:18:40 - MyApp] Performing sync

毎回再起動せずに、実行時にアプリケーションを起動するにはどうすればよいですか?


編集これは、Android 3.1以降では不可能です。 ソース

24
Martin Trigaux

EboMikeによって言及された2つのオプションとは別に:BOOT_COMPLETEDスマートフォンを再起動する代わりに、コマンドラインからブロードキャストします。

使用する

adb Shell am broadcast -a Android.intent.action.BOOT_COMPLETED

これにより、実際の再起動後などの状況が発生し、サードパーティアプリのブートレシーバーもトリガーされます。ターミナルで一度入力した後は、ほとんどのオペレーティングシステムで上向き矢印キーを押してからReturnキーを押すだけで、通常はそれを繰り返すことができます。または、アプリの再インストール後にトリガーされるスクリプトに含めることもできます。


ブロードキャストをアプリのみに制限する場合は、コンポーネントを指定することもできます。

adb Shell am broadcast -a Android.intent.action.BOOT_COMPLETED -n your.app.packagename/.YourReceiverClassName

これにより、再起動ブロードキャストが受信者にのみ送信されます。他のすべてのアプリは呼び出されません。

33
user658042

オプション1:サービスを開始するダミーアクティビティを追加します。出荷前に取り外してください。

オプション2:サービスを開始する2番目のテストアプリケーションを作成します。

2
EboMike

のような任意のインテントを介してブロードキャストレシーバーを使用してサービスを開始する

Android.intent.action.BOOT_COMPLETED

上記では不可能Android 3.1ユーザーがアプリを使用するまで、したがってアプリを使用するには、UI以外のアクティビティが1つ必要です(oncreate()でfinishを呼び出すことができます)。

ここで証明を参照

1