サービスとしてのみ実行することを目的とするアプリケーションがあります(インターフェイスはなく、バックグラウンドで実行するだけです)。 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以降では不可能です。 ソース
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
これにより、再起動ブロードキャストが受信者にのみ送信されます。他のすべてのアプリは呼び出されません。
オプション1:サービスを開始するダミーアクティビティを追加します。出荷前に取り外してください。
オプション2:サービスを開始する2番目のテストアプリケーションを作成します。
のような任意のインテントを介してブロードキャストレシーバーを使用してサービスを開始する
Android.intent.action.BOOT_COMPLETED
上記では不可能Android 3.1ユーザーがアプリを使用するまで、したがってアプリを使用するには、UI以外のアクティビティが1つ必要です(oncreate()でfinishを呼び出すことができます)。