2014-03-26 60 views
1

我设计的应用程序基本上只是一项服务。Android应用程序,仅服务

它没有MainActivity ...只是一个BroadcastReceiver和一个服务。每次构建和安装时,都不会发生任何事情。广播接收机检测手机是否连接到WiFi网络。如果WiFi没有连接,它将停止服务(),否则它startService()。

该服务将检查Pebble应用程序消息并执行消息接收的某些命令。问题是如果没有MainActivity,我一直无法启动服务。

难道可能是因为我没有MainActivity

+0

您的广播接收机注册了什么操作。 –

回答

0

Could it possibly because I have no MainActivity?

不,它不是因为mainActivity的,您可以在不mainActivity启动服务还,所以问题可能是别的东西,供大家参考检查这个例子下面,

public class MyStartServiceReceiver extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 
    Log.d("", "in start service"); 
    Intent service = new Intent(context, rs.class); 
    context.startService(service); 
} 
    } 
2

简单的背景应用程序在Android 3.0版本后停止工作。

从Android 3.1开始,系统的程序包管理器会跟踪处于停止状态的应用程序,并提供从后台进程和其他应用程序控制其启动的方法。

系统将FLAG_EXCLUDE_STOPPED_PACKAGES添加到所有广播意图。它可以防止来自后台服务的广播无意或不必要地启动停止的应用程序组件。更多在Launch controls on stopped applications

正如你所提到的,你只是有一个BroadcastReceiver和一个Service并没有Activity所以这个问题可能是你的BroadcastReceiver可能永远不会被启动,因为FLAG_EXCLUDE_STOPPED_PACKAGES标志。

要接收广播,您的应用程序进程应处于活动状态。如果应用程序的进程不存在,Android操作系统不允许BroadcastReceiver接收一些广播。

如果您有一个活动正在运行,您的过程是活着的,所以您的接收器被允许接收广播。

你可以做的是做一个透明的活动没有任何UI与

<action android:name="android.intent.action.MAIN" /> 
<category android:name="android.intent.category.LAUNCHER" /> 

,并使用startService()开始在后台服务,然后调用Activity。截至finish()您的服务正在运行,您的进程还活着,所以Android操作系统会让你接收广播。

0

试试这个:

没有setcontentview()startService()Activityfinish()它创建一个虚拟Activity

manifest删除启动标签和go to > Run As > Run Configuration > check Launch radiobutton并选择您没有任何视图(没有setcontentview()Activity