29

我创建了一个仅用于从链接启动的活动(使用意图过滤器)。我不希望此活动具有 GUI - 我只希望它启动服务并在栏中放置通知。我试图将链接的意图过滤器放在我的服务中,但这不起作用。有没有更好的方法来回答意图过滤器 - 或者我可以让我的活动没有 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. 您可以创建一个新的 BroadcastReceiver 来侦听 Intent 以触发您的通知并像这样启动您的服务:

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,而无需将其包含在 Activity 中:

<?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

我不确定服务是否可以工作,但广播接收器肯定不会。使用 startActivity() 启动 URL。广播接收器无法对此做出响应。

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

FTA:请注意,虽然 Intent 类用于发送和接收这些广播,但这里的 Intent 广播机制与用于通过 Context.startActivity() 启动活动的 Intent 是完全分开的。BroadcastReceiver 无法查看或捕获与 startActivity() 一起使用的 Intent;同样,当你广播一个 Intent 时,你永远不会找到或启动一个 Activity。

于 2010-08-06T13:49:32.343 回答
3

使用服务。我肯定工作。当您单击该程序时,它会在没有任何 GUI 的情况下完成工作。使用 pendintgintent...getService(MySerice.class ....)。然后,创建一个扩展 Service 类的新类 MyService。在 MyService.class 中,覆盖 onStart() 并做任何你想做的事情。

于 2010-12-28T22:22:06.817 回答