web-dev-qa-db-ja.com

Android GUIのない​​アクティビティ

(インテントフィルターを使用して)リンクからのみ起動することを目的としたアクティビティを作成しました。このアクティビティにGUIを持たせたくありません。サービスを開始し、バーに通知を表示するだけです。サービスにリンクのインテントフィルターを配置しようとしましたが、機能しません。インテントフィルターに答えるこれを行うより良いことはありますか?または、アクティビティにGUIを持たせないようにできますか?
混乱している場合は申し訳ありませんが、アイザック

29
Isaac Waller

あなたの最善の策はBroadcastReceiverを使用しているようです。次のように、インテントをリッスンして通知をトリガーし、サービスを開始する新しいBroadcastReceiverを作成できます。

public class MyIntentReceiver extends BroadcastReceiver {    
  @Override 
  public void onReceive(Context _context, Intent _intent) {
    if (_intent.getAction().equals(MY_INTENT)) {
      // TODO Broadcast a notification
      _context.startService(new Intent(_context, MyService.class));
    }
  }    
}

また、このIntentReceiverを、アクティビティ内に含める必要なく、アプリケーションマニフェストに直接登録できます。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
  package="com.domain.myapplication">
  <application Android:icon="@drawable/icon" Android:label="@string/app_name">
    <service Android:enabled="true" Android:name="MyService"></service>
    <receiver Android:enabled="true" Android:name="MyIntentReceiver">
      <intent-filter>
        <action Android:name="MY_INTENT" />
      </intent-filter>
    </receiver>
  </application>
</manifest> 
19
Reto Meier

以前の応答をエコーし​​、ブロードキャストレシーバーを使用しないでください。

同じ状況で、私がしたことはテーマをこうして宣言することでした:

<activity Android:name="MyActivity"
          Android:label="@string/app_name"
          Android:theme="@Android:style/Theme.NoDisplay">
96
JoeHz

サービスが機能するかどうかはわかりませんが、放送受信機は機能しません。 URLは、startActivity()を使用して起動されます。ブロードキャストレシーバーはこれに応答できません。

http://developer.Android.com/reference/Android/content/BroadcastReceiver.html

FTA:Intentクラスはこれらのブロードキャストの送受信に使用されますが、ここでのIntentブロードキャストメカニズムは、Context.startActivity()でアクティビティを開始するために使用されるIntentとは完全に分離されていることに注意してください。 BroadcastReceiverがstartActivity()で使用されるインテントを確認またはキャプチャする方法はありません。同様に、インテントをブロードキャストするとき、アクティビティを見つけたり、開始したりすることはありません。

4
lukejduncan

サービスを使用します。私は間違いなく働きます。プログラムをクリックすると、GUIなしで動作します。 pendintgintent ... getService(MySerice.class ....)を使用します。次に、Serviceクラスを拡張する新しいクラスMyServiceを作成します。 MyService.class内で、onStart()をオーバーライドし、やりたいことをすべて実行します。

3
Manoj