Konum ve sensör verilerine standart Android kullanarak erişebilirsiniz. platform API'leri için de geçerlidir.
Konum
Glass'ta konum, standart Android Mevcut konum verilerini almak için kullanılan platform API'leri konum sağlayıcıları.
Konum verilerini almak için aşağıdaki Android SDK sınıflarını kullanacaksınız:
LocationManager
- Android konum sistemi hizmetine erişim sağlar büyük ölçekliLocationProvider
.LocationProvider
- Bazı ölçütlere dayalı olarak konum verileri sağlar. Glass, özel "uzaktan" özelliği sağlar sağlayıcılar MyGlass özellikli eşlenmiş bir cihazdan konum verileri almanıza olanak tanır tamamlayıcı uygulama yüklendi.Criteria
- Hedeflerinizi ve teslimatlarınızı, belirlediğiniz ölçütlere göre en iyiyiLocationProvider
seçer.
Genel Bakış
Konum verilerini almak için,
LocationManager
sınıfını kullanarak bir veya daha fazla konum sağlayıcıdan veri alın.
Android telefon veya tabletteki uygulamalar, konum verilerini yerel cihazlardan alır Cihazdaki GPS ve ağ konumu sağlayıcıları. Ancak Glass'ta kullanılabilir konum sağlayıcıları grubu dinamiktir ve uzaktan içerebilir başka bir kaynaktan konum verileri sağlayan konum sağlayıcılar (örneğin, MyGlass tamamlayıcı uygulamasının yüklü olduğu, Bluetooth üzerinden eşlenmiş cihaz. İşlenecek Bu ek sağlayıcılar, birden fazla sağlayıcının konum güncellemelerini dinleyin sağlayıcı yerine sağlayıcılarını kullanıyor.
Mevcut tüm konum sağlayıcılardan veri istemek için:
- Bir
Criteria
oluşturun oluşturmanız gerekir. getProviders()
numaralı telefonu arayın seçeneğini tıklayarak ölçütlerinizi karşılayan etkin sağlayıcıların listesini alabilirsiniz.- Sağlayıcı listesini yineleyin ve sağlayıcıların tümünden güncelleme isteyin. Bu sayede, uzaktaki sağlayıcılardan Bard'daki yerel sağlayıcılardan da (örneğin, kablosuz bağlantı ağ sağlayıcısı) ekleyebilirsiniz.
Her videoda sağlanan doğruluk ve zamanlama bilgilerini kullanın iyi bir güncelleme olup olmadığını belirlemek için bir tane daha bekleyin.
LocationManager locationManager; // initialized elsewhere // This example requests fine accuracy and requires altitude, but // these criteria could be whatever you want. Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_FINE); criteria.setAltitudeRequired(true); List<String> providers = locationManager.getProviders( criteria, true /* enabledOnly */); for (String provider : providers) { locationManager.requestLocationUpdates(provider, minTime, minDistance, listener); }
Sensörler
Cam
Glass, cihazın burada olup olmadığını algılamak için özel bir sensöre sahiptir
kullanıcıların kafa. Bu ayar etkinleştirildiğinde, cihaz
kullanılmıyor. Google Glassware'inizdeki bu özelliği, devre dışı bırakmak veya
arka plan hizmetlerini kısıtlayabilir. Bir
BroadcastReceiver
algılamak
ACTION_ON_HEAD_STATE_CHANGE
etkinlikler.
Aşağıdaki örnekte, kullanıcı Glass'ı kafasından kaldırmıştır:
- Uygulama
BroadcastReceiver
gereken adımları uygulayın. - Hizmetinizde
onCreate()
yöntemini dinleyen bir alıcıyı kaydedin veACTION_ON_HEAD_STATE_CHANGE
amacı. onDestroy()
alıcının kaydını iptal edin.import com.google.android.glass.content.Intents; ... public class LiveCardService extends Service { ... private boolean mIsStopped = false; private final BroadcastReceiver broadCastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (Intents.ACTION_ON_HEAD_STATE_CHANGED.equals(intent.getAction())) { boolean onHead = intent.getBooleanExtra(Intents.EXTRA_IS_ON_HEAD, false); if (onHead) { mDelay = LiveCardService.DELAY_MILLIS; if (isStopped()) { // Resume updating scores setStop(false); // Restart immediately to get a refreshed score mHandler.postDelayed(mUpdateLiveCardRunnable, 0); } } else { // Increase the delay when the device is off head mDelay = LiveCardService.DELAY_MILLIS_EXT; } } } }; private final Runnable mUpdateLiveCardRunnable = new Runnable() { @Override public void run() { if (mDelay == DELAY_MILLIS_EXT) { // Count the increased delay as a retry attempt mRetryCount++; } else if (mDelay == DELAY_MILLIS) { mRetryCount = 0; } if (mRetryCount > MAX_RETRIES) { // Stop updating scores mIsStopped = true; } if (!isStopped()) { // Generate fake points. homeScore += mPointsGenerator.nextInt(3); awayScore += mPointsGenerator.nextInt(3); // Update the remote view with the new scores. mLiveCardView = getRemoteViews(homeScore, awayScore); // Always call setViews() to update the live card's RemoteViews. mLiveCard.setViews(mLiveCardView); // Queue another score update in 30 seconds. mHandler.postDelayed(mUpdateLiveCardRunnable, mDelay); } } }; @Override public void onCreate() { super.onCreate(); mPointsGenerator = new Random(); mDelay = DELAY_MILLIS; registerReceiver(broadCastReceiver, new IntentFilter( Intents.ACTION_ON_HEAD_STATE_CHANGED)); } @Override public int onStartCommand(Intent intent, int flags, int startId) { if (mLiveCard == null) { // Get an instance of a live card mLiveCard = new LiveCard(this, LIVE_CARD_TAG); // Inflate a layout into a remote view mLiveCardView = new RemoteViews(getPackageName(), R.layout.live_card); // Set up initial RemoteViews values homeScore = 0; awayScore = 0; mLiveCardView = getRemoteViews(homeScore, awayScore); // Set up the live card's action with a pending intent // to show a menu when tapped Intent menuIntent = new Intent(this, LiveCardMenuActivity.class); menuIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); mLiveCard.setAction(PendingIntent.getActivity( this, 0, menuIntent, 0)); // Publish the live card mLiveCard.publish(PublishMode.REVEAL); // Queue the update text runnable mHandler.post(mUpdateLiveCardRunnable); } return START_STICKY; } @Override public void onDestroy() { if (mLiveCard != null && mLiveCard.isPublished()) { //Stop the handler from queuing more Runnable jobs setStop(true); mLiveCard.unpublish(); mLiveCard = null; } unregisterReceiver(broadCastReceiver); super.onDestroy(); } @Override public IBinder onBind(Intent intent) { return null; } private RemoteViews getRemoteViews(int homeScore, int awayScore) { RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.live_card); remoteViews.setTextViewText(R.id.home_team_name_text_view, getString(R.string.home_team)); remoteViews.setTextViewText(R.id.away_team_name_text_view, getString(R.string.away_team)); remoteViews.setTextViewText(R.id.footer_text, getString(R.string.game_quarter)); remoteViews.setTextViewText(R.id.home_score_text_view, String.valueOf(homeScore)); remoteViews.setTextViewText(R.id.away_score_text_view, String.valueOf(awayScore)); return remoteViews; } public boolean isStopped() { return mIsStopped; } public void setStop(boolean isStopped) { mIsStopped = isStopped; } }
Android
Aşağıdaki Android sensörleri Glass'ta desteklenir:
TYPE_ACCELEROMETER
TYPE_GRAVITY
TYPE_GYROSCOPE
TYPE_LIGHT
TYPE_LINEAR_ACCELERATION
TYPE_MAGNETIC_FIELD
TYPE_ORIENTATION
(desteği sonlandırılmış)TYPE_ROTATION_VECTOR
Aşağıdaki Android sensörleri desteklenmez:
ziyaret edin.Glass'ta sensörleri kullanmayla ilgili bazı ipuçlarını aşağıda bulabilirsiniz:
- Glass sensör koordinat sistemi, Glass ekrana göre aşağıda gösterilmektedir. Daha fazla bilgi için bkz. sensör koordinat sistemi.
İvme ölçer, jiroskop ve manyetometre, Glass cihazın optik kapsülünde yer alır. Ekran görüntüsünde, kullanıcılar cihazı döndürebilir. açısını doğru ayarlamanız gerekir. Bu nedenle, ve pusula yönü gibi uygulamalar için bu sensörlerden gelen açıları kullanarak.
Pil ömrünü korumak için sensörleri yalnızca ihtiyaç duyduğunuzda dinleyin. Örneğin, Bardak oluşturmak için
Service
kullanır.LiveCard
Sensörlere yalnızca canlı kart göründüğünde ihtiyaç duyuyorsanız,LiveCard
, sensörleri dinlemeyi başlatmak ve durdurmak için geri çağırma yöntemlerini gösterir.Sensör etkinliği geri çağırmaları, UI iş parçacığı üzerinde çalışır. Bu nedenle etkinlikleri işleyip hızlı teslim etmek üzerine. Sensör etkinliklerini sıraya aktarabilir ve arka plan iş parçacığı kullanabilirsiniz. çok uzun sürerse bunları ele almanız gerekir.
50 Hz genellikle baş hareketini izlemek için yeterli bir örnekleme hızıdır.
Sensörlerin nasıl kullanılacağı hakkında daha fazla bilgi için Android geliştirici kılavuzu.