我正在尝试展示一张卡片,所以我知道到目前为止所做的一切。但是,当我尝试显示卡时,它会直接进入主卡。我试图显示的卡片只是显示之前在语音识别器中所说的内容但是没有用,所以我只是放了纯文本而且也没用。应用程序 - 语音触发器 - >语音识别器 - >这项服务:
public class MedMinderService extends Service {
public String MedName;
public String voiceResults;
private static final String TAG = "ShowData";
private static final String LIVE_CARD_ID = "showdata";
public static final String PREFS_NAME = "MyPreferencesFile";
private TimelineManager mTimelineManager;
private LiveCard mLiveCard;
@Override
public void onCreate() {
super.onCreate();
mTimelineManager = TimelineManager.from(this);
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
public int onStartCommand(Intent intent, int flags, int startId) {
String voiceResults = intent.getExtras()
.getString(RecognizerIntent.EXTRA_RESULTS);
String MedName = voiceResults; //MedName declared
SharedPreferences MedInfo = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = MedInfo.edit();
editor.putString("MedName", MedName.toString());
editor.commit();
mLiveCard = mTimelineManager.getLiveCard(LIVE_CARD_ID);
Intent i = new Intent(this, ShowDataActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
return START_STICKY;
}
}
底部的意图是这个活动:
public class ShowDataActivity extends Activity {
private LiveCard mLiveCard;
public static final String PREFS_NAME = "MyPreferencesFile";
private GestureDetector mGestureDetector;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SharedPreferences MedInfo = getSharedPreferences(PREFS_NAME, 0);
Card ShowDataCard = new Card(this);
ShowDataCard.setText("IT WORKS!");
//ShowDataCard.setText(MedInfo.getString("MedName", "your medication"));
View ShowDataCardView = ShowDataCard.toView();
setContentView(ShowDataCardView);
}
已经注释掉的“ShowDataCard”是我原本试图用语音识别做的事情,但它甚至不适用于“IT WORKS!”这个文字。
再说一遍:我只是想展示一张带有“IT WORKS”文字的卡片
感谢
答案 0 :(得分:5)
使用纯文本显示直播卡的最简单方法是使用与RemoteViews
兼容的小部件。您可以在GDK文档中找到它们的列表:
https://developers.google.com/glass/develop/gdk/ui/live-cards
在创建低频实时卡部分下。以下是一些示例代码(基于您的上述代码),可以快速实现:
final String LIVE_CARD_ID = "showdata";
mLiveCard = mTimelineManager.getLiveCard(LIVE_CARD_ID);
RemoteViews remoteViews =
new RemoteViews(getPackageName(), R.layout.layout_helloglass);
mLiveCard.setViews(remoteViews);
// Make sure Glass navigates to LiveCard immediately
mLiveCard.setNonSilent(true);
mLiveCard.publish();
layout_helloglass.xml
的布局文件如下所示:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="Hello, Glass!" />
</FrameLayout>
如果您仍希望从Activity
导航到另一个LiveCard
,则需要将Activity
与PendingIntent
相关联,然后将PendingIntent
关联起来使用LiveCard
的动作。这将在LiveCard.publish()
方法之前发生:
Intent i = new Intent(this, ShowCardActivity.class);
mLiveCard.setAction(PendingIntent.getActivity(this, 0, i, 0));
那应该让你起来跑步!希望这会有所帮助。
答案 1 :(得分:1)
GDK Sneak Peek中存在一个错误,导致语音提示无法创建服务。如果在服务的Log.d()
覆盖中插入onStartCommand()
来电,他们会发现它从未被调用过。
此错误已在GDK预览中修复。此行为不应再次出现。
此问题在GDK预览发布后重写,以删除此过时的答案。感谢用户Falcon通知我。