0

SMS レシーバー アプリを作成しましたが、サービスとして作成したいのですが、バックグラウンドで実行する必要があり (つまり、このアプリには個別の UI がなく、アラーム アプリのように動作する必要があります)、モバイルが再起動しても自動的に起動します。 ..これについて誰か助けてもらえますか?

以前の SMS レシーバー アプリのコードはここにあり ました Android Receive SMS App でアクティビティ ComponentInfo をインスタンス化できません

4

3 に答える 3

3

バックグラウンドで実行する必要があります

BroadcastReceiver(文書化されていない)既存のものは、android.provider.Telephony.SMS_RECEIVEDすでにバックグラウンドで実行されています。

モバイルが再起動しても自動的に起動します

BroadcastReceiver(文書化されていない) の既存のものandroid.provider.Telephony.SMS_RECEIVEDは、デバイスの再起動後に既に利用可能です。

于 2012-05-27T13:07:12.600 に答える
1

電話の起動時にサービスを実行する場合は、次のインテント フィルターを使用してブロードキャスト レシーバーを宣言するだけです。

    <receiver android:name="MyStartupIntentReceiver">
<intent-filter>
<action
android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.HOME" />
</intent-filter>
</receiver>

ブロードキャスト レシーバーの onReceive() メソッドで、サービスを起動するだけです。

public void onReceive(Context context, Intent intent) {
    Intent serviceIntent = new Intent();
    serviceIntent.setAction("myPackage.MyService");
    context.startService(serviceIntent);

}

マニフェスト内のサービスを、ブロードキャスト レシーバーで起動するインテントと同じ名前にリンクしてください。

<service android:name="MyService">
<intent-filter>
<action
android:name="myPackage.MyService" />
</intent-filter>
</service>
于 2012-05-27T13:06:14.020 に答える
0

CommonsWare が述べているように、SMS ブロードキャストを受信するためにバックグラウンドで「サービス」を実際に実行する必要はありません。マニフェストに適切に登録されている場合、インテント フィルターとして「android.provider.Telephony.SMS_RECEIVED」を含む BroadcastReceiver が起動します。 SMS を受信するたびに、他の操作は必要ありません。

正確に何をしたいかによって、その放送受信機から実際のサービスを介して作業するか、おそらくより良いオプションは IntentService を使用することです。これは、ブロードキャストに使用されるスレッドが開始直後に強制終了されるためです。そのため、大規模な作業を行うべきではありません。

一般に、明示的に必要とされない限り、実際の「サービス」を使用しないことをお勧めします....しかし、それが必要な場合は、Davideが正しい方向に導く必要があります。

于 2012-05-27T13:50:55.080 に答える