29

(インテント フィルターを使用して) リンクからのみ起動することを意図したアクティビティを作成しました。サービスにリンクのインテント フィルターを配置しようとしましたが、うまくいきません。インテント フィルターに応答するこれを行うためのより良い方法はありますか?または、アクティビティに GUI を持たないようにすることはできますか?
混乱させてごめんなさい、アイザック

4

4 に答える 4

97

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

同じ状況で、私がしたことは、テーマを次のように宣言することでした。

<activity android:name="MyActivity"
          android:label="@string/app_name"
          android:theme="@android:style/Theme.NoDisplay">
于 2011-06-25T08:50:16.753 に答える
19

あなたの最善の策は、を使用しているようですBroadcastReceiver。Intent をリッスンして通知をトリガーし、次のようにサービスを開始する新しい 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> 
于 2009-02-09T06:10:14.520 に答える
4

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

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

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

于 2010-08-06T13:49:32.343 に答える
3

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

于 2010-12-28T22:22:06.817 に答える