我已经创建了一个活动,只能从链接启动(使用意图过滤器)。我不希望此活动具有GUI - 我只是希望它启动一个服务并且在酒吧中发出通知。我试图将链接的意图过滤器放在我的服务中,但这不起作用。有没有更好的做法可以回应意向过滤器 - 或者我可以让我的活动没有GUI?
对不起,如果我很困惑,艾萨克没有GUI的Android活动
回答
你最好的选择似乎是使用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>
请告诉我什么是_intent.getAction()。equals(MY_INTENT)中的MY_INTENT,抱歉,如果我听起来天真,我只是一个初学者。 – 2010-02-18 12:33:49
你可以使用任何你想要识别你的意图的字符串。它必须是独一无二的。我建议你使用“your.package.name.START_SERVICE” – 2010-08-17 18:28:30
我不确定服务是否可以工作,但广播接收器肯定不会。网址是使用startActivity()启动的。广播接收机无法对此做出响应。
http://developer.android.com/reference/android/content/BroadcastReceiver.html
FTA: 需要注意的是,虽然Intent类用于发送和接收这些广播,这里的意图广播机制是完全独立于被用于启动与Context.startActivity活动的Intent() 。 BroadcastReceiver无法查看或捕获与startActivity()一起使用的Intents;同样,当您广播一个意图时,您将永远不会找到或启动一个活动。
使用服务。我工作肯定。当你点击程序时,它会在没有任何GUI的情况下完成它的工作。使用pendintgintent ... getService(MySerice.class ....)。然后,创建一个扩展Service类的新类MyService。在MyService.class中,重写onStart()并做任何你想做的事情。
回应以前的回应,你不应该使用广播接收器。
在相同的情况下,我所做的就是申报正是如此主题:
<activity android:name="MyActivity"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoDisplay">
我现在认识到,活动只是GUI,这就是他们的目的,所以我将不得不使用服务或别的东西。谢谢Isaac – 2009-02-08 23:44:51