因此,我使用GDK构建了一个小型Google Glass应用程序,该应用程序基本上通过在后台打开一个Thread并每隔几秒轮询一次RESTful Web服务来伪造推送通知。
目前,当我打开应用程序时,它会加载并运行服务,但是活动(线程所在的位置)的onStart()和onCreate()不会被调用,直到用户通过打开应用程序与应用程序交互为止菜单。
之前我从未进行过Android开发,所以我不知道为什么用户启动应用后我的活动可能无法加载。
以下是一些代码的概述。
public class MainActivity extends Activity {
@Override
protected void onStart()
{
super.onStart();
startThread();
}
然后是实际线程(我知道它很可怕,它是原型:-P)
public void startThread()
{
thread = new Thread()
{
@Override
public void run() {
try {
while(true) {
sleep(5000);
boolean tmp = poll();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
thread.start();
}
Android Manifest
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.testpack"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="15"
android:targetSdkVersion="15" />
<application
android:allowBackup="true"
android:icon="@drawable/logo_box"
android:label="Test">
<uses-library
android:name="com.google.android.glass"
android:required="true" />
<activity
android:name="com.testpack.MainActivity"
android:theme="@style/MenuTheme"
android:enabled="true"/>
<service
android:name="com.testpack.MainService"
android:label="@string/app_name"
android:icon="@drawable/logo_box"
android:enabled="true">
<intent-filter>
<action android:name="com.google.android.glass.action.VOICE_TRIGGER" />
</intent-filter>
<meta-data
android:name="com.google.android.glass.VoiceTrigger"
android:resource="@xml/hello_show" />
</service>
</application>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
答案 0 :(得分:2)
与大多数常规Android应用程序不同,Glassware通常会启动一个服务(在后台运行)而不是一个活动(这是一个前台任务)。是因为很多时候你会想要与时间线互动(即添加真人卡等),而不是通过活动接管整个屏幕(或沉浸在Glass中)。
在清单中,您将使用语音命令启动MainService,但您的代码位于MainActivity中。
如果您使用onStartCommand
MainService
方法启动线程,该方法应在菜单/语音命令启动应用程序后立即启动。
我希望这会让事情更加清晰。