Hakkında Makale
Bu makale Mobile Sensor API hakkında anlatılmaktadır. Bu Mobile Sensor API bakış içerir; sensör algılama, sensör bağlantısı, veri, veri işleme, push desteği, izinleri alma. Örnek kod parçası Accelerator sensör kullanarak gösteren bu makalenin sonunda verilmektedir.
Kapsam:
Bu makale, Java ME hakkında bilgi sahibi ve JSR 256 kısa bir tanıtıma ihtiyacı kullanıcılar içindir.
Kaynaklar:
1. Mobil Sensör API Özellikler:
Linkleri görüntülemek için kayıt olmalısınız
2. Sensör API Madde:
Linkleri görüntülemek için kayıt olmalısınız
Kısaltmalar:
Java ME Java Platform Micro Edition
CLDC Bağlantı Sınırlı Cihaz Konfigürasyonu
MIDP Mobile Information Device Profile
JSR Java Özellik İsteği
DOS Genel Bağlantı Çerçeve
API Uygulama Programlama Arabirimi
AMS Uygulama yönetim yazılımı
URL Uniform Resource Locator
Giriş
JSR 256 Mobile Sensor API Java ME uygulaması kolay bir veri almak ve düzgün sensörlerinden sağlar. API, sensörler yönetmenin yolu birleşik sunuyor mobil cihazlarına bağlanabilir ve sensör verileri kolay erişim.
API kaynak kısıtlı cihazları hedefleyen ve bellek çalıştırmak için verimli olması gerekir.
API birçok Java Micro Edition Tercihler ile kullanılabilecek bir Opsiyonel Paketi olarak tasarlanmıştır. Minimum platform API gerektirdiği Connected, Limited Device Configuration (CLDC), 1.1 sürümüdür.
Genel bakış
Bir sensör herhangi bir ölçüm veri kaynağıdır. Sensörler farklı türleri şunlardır:>
manyetometreler ve accelerometers gibi-fiziksel sensörler.
batarya seviye sensörü gibi-Sanal sensörler birleştirmek ve fiziksel sensörler diğer tür aldığınız verileri değiştirmek. Pil seviye sensörü bir pil şarj kalan gösterir.
Sensör Kullanımı Kılıfları
Sensörler yaygın aşağıdaki senaryolar için kullanılabilir:
-Oyun
Cihazın kendisi bir oyun kontrolü ile ilgili giriş yöntemleri hareket sağlamak gibi davranır.
Bir aygıtın-iyi kullanılabilirlik
Geliştirir erişilebilirlik ve cihazın kullanılabilirliği değiştirme ekran arka, ekran yönlendirmesi gibi.
-Monitor sağlık durumu
Monitörler kullanıcı kalp hızı, vücut ısısı vb
-Açık faaliyetleri
Adım gibi sayaç
-Monitor dış koşullar
Hava basıncı, sıcaklık, rüzgar, nem vb
API Tanımı
JSR 256 API iki parçaya ayrılır:
javax.microedition.sensor
javax.microedition.sensor.control
javax.microedition.sensor
Paket javax.microedition.sensor zorunlu bir paket ve bir sensörden bilgi almak için API sağlar.
Bu paket, 6 sınıf ve 10 arayüzü içerir. Aşağıdaki tabloda, arayüzler ve sınıflar gösterir.
Tablo 1: Sensör Paketi Interface Tablo
Arayüz Açıklama
kanalın verileri özellikleri hakkında ChannelInfo bilgi sağlar
Durum Setleri durum veri izleme ve bildirim veri tanımlanmış durumda olduğunu alır
ConditionListener sağlar bildirimleri takip verileri durum uygulama tarafından belirlenen uygun
Veri temsil veri algılayıcı bir kanal alınan değerler
DataAndErrorListener Uygulanan uygulama tarafından veri ve algılayıcıdan hataları almak
DataListener Uygulanan uygulama tarafından sensör veri almak
gerçek bir sensör SensorConnection soyutlama.
SensorInfo içerir fiziksel sensör hakkında çeşitli bilgiler
SensorListener temsil bildirimleri aldığı bir dinleyici zaman sensör değişikliklerin durumu
Tablo 2: Sensör Paketi Sınıf Tablo
Sınıf Açıklaması
LimitCondition Durum sayısal veri koşullarını çeşitli tür koymak amacıyla
MeasurementRange temsil sensör bir kanalın ölçüm aralığı
ObjectCondition Çekler elde edilen değere set limit eşitliği
RangeCondition Çekler ölçülen veri değeri belirlenen kapsama alanı içinde,
SensorManager Kullanılan sensörler bulmak ve onların durumu monitör
Birim temsil elde edilen değerlerin birim
javax.microedition.sensor.control
Paket javax.microedition.sensor.control isteğe bağlı bir pakettir ve olası kontrol örnekleri temsil, örneğin başlangıç için, durdurma, kalibrasyon ve ölçüm aralığı ya da doğruluğu ayar ve yeni kontroller uygulanması için bir arayüz sağlar.
Bu paket 6 arayüzleri içerir. Aşağıdaki tabloda arabirimleri gösterir.
Tablo 3: Kontrol Paket Arabirimi Tablo
Arayüz Açıklama
Kontrol temsil eder bir sensör kontrol sensörü kontrol sağlar
Kontrol edilebilir temsil kontrolleri ile sağlanan kontrol edilebilir bir sensör
MeasurementRangeControl MeasurementRangeControl nesne bir genel kontrol sensörünün ölçüm aralığı ayarlamak için kullanılan bir örnektir
SampleRateControl SampleRateControl nesne bir genel kontrol sensörünün örnekleme hızı ayarlamak için kullanılan bir örnektir
StartControl StartControl nesne bir genel kontrol () metodu execute onun arayarak sensör başlatmak için kullanılan bir örnektir
StopControl StopControl nesne bir genel kontrol () metodu execute onun arayarak sensör durdurmak için kullanılan bir örnektir
Algılayıcı
sensör verileri kullanmak isteyen uygulama genellikle bir sensör ile aşağıdaki işlemleri gerçekleştirir:
- Sensör algılama (Discovery)
- Sensör harekete geçirmek. (Bağlantı, İzleme)
- Veri yakalamak. (İşleme alınıyor, Listener, Durum)
- Sensör deaktivasyon
Sensör Algılama
Mobil Sensör API ana işlevselliği sensör veri almaya ve koşullar koymak dayalı ekran. bulunmasını uygun algılayıcı ya da önceden sipariş kullanmak için bilinir. Bir uygulama için arayabilirsiniz istenen miktar ve içerik türüne bağlı sensörü.
Miktar sensör ölçüm olan özelliğidir.
Bağlam türü ölçümü, "ambient" veya "cihaz" gibi alınır ortamı temsil eder.
Bağlam türü dört gruba sensörleri sınıflandırır:
- Ambient sensörler çevre bazı ambient mülkiyet ölçme.
- Cihaz sensörleri özellikleri cihazı ile ilgili ölçme.
- Kullanıcı sensörler kullanıcı bazı fonksiyon ölçüm.
- Araç sensörler özellikleri bir araç ile ilgili ölçme.
Uygulama bağımsız birini kullanabilir veya her ikisi belirtin.
SensorManager sensörler bulmak için iki statik yöntemleri sağlar.
- FindSensors (miktar, contextType)
public static SensorInfo [] findSensors (miktar java.lang.String, contextType java.lang.String)
miktar aşağıdaki değerleri arasında olabilir daha kesin bir eleme ve contextType sağlar nerede:
- SensorInfo.CONTEXT_TYPE_AMBIENT
- SensorInfo.CONTEXT_TYPE_DEVICE
- SensorInfo.CONTEXT_TYPE_USER
- SensorInfo.CONTEXT_TYPE_VEHICLE
Her iki parametre ise, desteklenen tüm sensörleri iade edilir. sadece bir parametre daha sonra sadece diğer arama kriteri olarak kullanılan boş ise.
- FindSensors (URL)
public static SensorInfo [] findSensors (url java.lang.String)
Belirli Sensör da URL sağlayarak bulunabilir.
Örneğin URL "sensörü: ivme; contextType = aygıt; model = acc01" ivme sensörü belirtir.
Yukarıdaki iki yöntem SensorInfo nesneler bulunan sensörler listeleyen bir dizi döner. SensorInfo sensörü özellikleri aşağıda belirtilen bilgileri içerir:
- Bağlantısı, uzak, kablolu ve kablosuz gömülü Türü
- Bağlam Türü kullanıcı, aygıt, ambient, araç
sensör - Açıklama açıklama
- Model satıcı modele bilgi
- Adet eleme uygun sensör bulma yardım
- URL url sensör bağlantısı için gerekli
- Sensör ChannelInfo kanalları
- Emlak özgü özellikleri sensör
- MaxBufferSize maksimum veri arabelleği boyutunu
Aşağıdaki kod parçası nasıl sensörleri bulmak gösterir.
/ * Sensörleri miktar ve içerik türü * ile belirtilen olsun /
SensorInfo [] sensorInfos = SensorManager.findSensor ("ivme" SensorInfo.CONTEXT_TYPE_USER);
/ * Sensörü URL sağlayarak .* özel sensör Bul /
SensorInfo [] sensorInfos = SensorManager.findSensors ("sensörü: ivme; contextType = aygıt; model = acc01");
/ * Tüm sensörleri bile erişimlerini * sınırlıdır kullanılabilir olsun /
SensorInfo [] inf = SensorManager.findSensors ( );
çeşitli sensörler aynı miktar ölçme ise, uygulama geliştiricisinin belirli bir sensör kriterler doğruluğu veya örnekleme oranı gibi temel seçmek isteyebilirsiniz. Bu inceleme ve bilgi SensorInfo örnekleri tarafından sağlanan karşılaştırılarak yapılır.
Bazı sensörler kullanımının kısıtlanmasına ilişkin sadece üretici, operatör, kullanılmak üzere veya parti alanı uygulamalar güvenilir amaçlanan sadece veya izni verir. Uygulama gerekli izinleri yoksa, tüm bulundu sensörleri hala iade edilir ancak açılmasını gerekli değildir.
Connector.open () ve PushRegistry.registerConnection () yöntemleri SecurityException atarsanız uygulama değil gerekli izni sensörü kullanmak zorundasınız.
İzleme Sensör
SensorManager da kayıt ve SensorListener nesneleri kaydını sorumludur. A SensorListener sensorAvailable () / alacak () bildirimleri sensorUnavailable. Her eşleşen SensorListener için sadece bir tebliğ değişikliği başına durumu gönderilir.
/ * Kayıt dinleyicinin durum özellikle sensör * değiştirilmiş almak /
...
SensorManager.addSensorListener (yeni SensorListener () (
public void sensorAvailable (SensorInfo s) (
("Sensör kullanılabilir form.append

" s.getUrl ());
)
public void sensorUnavailable (SensorInfo s) (
form ("Sensör kullanılamıyor: (" ()) s.getUrl;
)
), "Ivme");
...
Bağlantı oluşturma
SensorInfo nesneler bilgi, sensör URL getUrl () metodu ile SensorInfo nesneden alınabilir tabanlı sensör istenilen seçtikten sonra.
Sensörü URL Bağlayıcı sınıf üzerinden SensorConnection oluşturmak için kullanılır. SensorConnection bir Genel Bağlantı Framework (DOS) Bağlantı olduğunu.
Connector.open () metodu bir SensorConnection örnek algılayıcı etkin bir bağlantı sağlayan döner. Eğer URL verilen çoklu sensör ardından Bağlayıcı serbestçe hangi eşleme iade SensorConnection için kullanılacak sensör karar verebilir eşleştirilmesidir.
Aşağıdaki kod parçası nasıl SensorConnection edinme gösterir.
...
(Deneyin
/ * URL seçilen sensör * verilmesinin bir sensör bağlantı oluşturma /
SensorConnection sensorConn = (SensorConnection) Connector.open (sensorInfo [selectedSensor]. GetUrl ());
) (IOException e) (e.printStackTrace () yakalamak

...
Veri Yakalama
SensorConnection gerçek sensör cihaza bağlantı temsil eder. SensorConnection sensör verileri almak için kullanılır.>
Verileri iki yolla alınabilir:
- Eş zamanlı
- Asenkron
Senkron Veri
Senkron veri alma SensorConnection.getData (int bufferszie) yöntemini çağırarak yapılır. BufferSize parametre her veri nesnesi içindeki örneklerin sayısını tanımlar. Aşağıdaki kod parçası nasıl senkron veri alma başlamak gösterilmektedir
....
SensorConnection acceralation = (SensorConnection) Connector.open ("sensörü: ivmede");
final int bufferSize = 1;
Veri [] data = acceralation.getData (bufferSize);
int i = 0, len = data.lenght (örneğin; i <len; i) (
double değeri = veri
. getDoubleValues () [0];
("\ N kanal form.append =" veri . GetChannelInfo (). GetName () ", value =" değer);
)
...
Elde edilen her veri nesnesi bir kanal veri kapsüller Veri nesneleri bir dizi olarak döndürülür. Kanal bir şekilde veri yapısı etmektir.
Kanallar ölçüm farklı boyutlarını temsil etmektedir. sensör aynı anda birkaç değerleri tedbirler, her kanal değerleri Veri nesneleri ayırmak için saklanır. sensör sadece bir mülkiyet ölçme ise, sadece bir kanaldır. örneğin termometre ile. Öte yandan, Accelerometer yani "axis_x", "axis_y" ve "axis_z" üç kanal vardır.
Veri nesne ve menşe kanal hakkında bilgiler içermektedir o Data.getChannelInfo () metodu ile alınabilir.
Aşağıdaki bilgiler tüm ChannelInfo nesneleri için zorunludur:
Kanalın - Adı benzersiz bir isim
- Doğruluk <0-1> arasında ekspres
- Veri Türü TYPE_DOUBLE, TYPE_INT, TYPE_OBJECT
- Ölçme ile tanımlanmış aralıkları ve mümkün olan en küçük değeri ve çözünürlüğü
- Ölçek on üs olarak ifade
hangi veri değeri temsil edilir - Birim birim
Asenkron Veri
Eşzamansız modu uygulamaları DataListener nesneler olarak doğru SensorConnection setDataListener kullanarak () sırayla () toplanan verilerin bildirimleri dataReceived almak DataListener Dinleyiciyi int bufferSize kayıt gerektirir. getting bildirimleri çıkmak için, uygulama yöntemi removeDataListener () çağrısı gerekir.
Bir SensorConnection bir DataListener kayıt, ayrıca arabelleğini sağlamalıdır. Bu tampon kaç veri değerleri DataListener bir olay göndermeden önce toplanması gerektiğini gösterir. düşük bir değere tampon boyutu ayarlama daha hızlı güncellemeler verecekti. Ancak, kolayca accelerometer elde edilen ortalama hesaplayarak freak değerleri filtreleyebilirsiniz geniş bir tampon boyutunu kullanarak.
public class DataCollecter DataListener uygular
(
...
public void connect ()
(
...
sensörü = (SensorConnection) Connector.open (sensorInfos [selectedSensor]. getUrl ());
sensor.setDataListener (Bu, 1);
...
)
public void () (SensorConnection sensörü, Data [] data, boolean isDataLost dataReceived
Son string xchannel = "axis_x";
Son string ychannel = "axis_y";
Son string zchannel = "axis_z";
int i = 0 (için; i <data.length; i) (
xchannel.equals (veri (eğer. getChannelInfo (). getName ())) (
Çift xvalue = veri . getDoubleValues () [0];
("Kanal x değeri") xvalue form.append;
) Else if (ychannel.equals (veri . GetChannelInfo (). GetName ())) (
Çift yvalue = veri . getDoubleValues () [0];
("Yvalue y değeri kanal) form.append;
) Else if (channelNames [2]. (Eşittir veri . GetChannelInfo (). GetName ())) (
Çift zvalue = veri . getDoubleValues () [0];
("Kanal z değer") zvalue form.append;
)
)
)
...
)
Koşullar Ekleme
Koşullar da sensörü ayarlanabilir. Koşullar sensör verileri izlemek için kullanılır. Kanal Durumu nesneler sensör kanala bağlı tutar.
Üç koşullar Sensör API verilmektedir:
- LimitCondition
- RangeCondition
- ObjectCondition.
ConditionListener durum alacak şekilde ayarlanması gerektiğini tebliğ, durumun herhangi bir karşılanmaktadır bir araya geldi.
LimitCondition
LimitCondition sayısal veri koşullarını çeşitli tür ayarlamak için tasarlanmıştır. LimitCondition Operatör aracılığıyla ayarlanır. Operatör LimitCondition belirlenmesinde önemli bir role sahiptir.
Aşağıdaki operatörlerin LimitCondition belirlenmesinde kullanılması gerekir:
- Condition.OP_EQUALS - eşittir
- Condition.OP_LESS_THAN_OR_EQUALS - daha az veya eşit
- Condition.OP_LESS_THAN - daha az
- Condition.OP_GREATER_THAN - daha fazla
- Condition.OP_GREATER_THAN_OR_EQUALS - büyük veya eşittir
Örnekler Kanal nesnelere LimitCondition nesneleri ayarlamak için kullanılır.
channelObj.addCondition (Dinleyiciyi yeni LimitCondition (50, Condition.GREATER_THAN));
ConditionListener channelObj ne zaman değeri> 50 olduğu bildirilir.
channelObj.addCondition (Dinleyiciyi yeni LimitCondition (-45, Condition.LESS_THAN));
channelObj.addCondition (Dinleyiciyi yeni LimitCondition (45, Condition.GREATER_THAN));
ConditionListener channelObj ne zaman değeridir bildirilecektir <-45 veya> 45.
RangeCondition
RangeCondition kontrol ölçülen veri değeri belirlenen aralık içinde olup olmadığını. aralıkları Dört tip operatörleri ile tanımlanabilir:
- Açık aralığı (upperLimit lowerLimit)
- Kapalı aralık, [lowerLimit, upperLimit)
- Yarı kapalı yarı açık aralık, (upperLimit lowerLimit)
- Yarı yarı kapalı aralığı açmak (upperLimit lowerLimit)
Örnekler Kanal nesnelere RangeCondition nesneleri belirlemek için:
channelObj.addCondition (Dinleyiciyi yeni RangeCondition (lowerLimit, Condition.OP_GREATER_THAN, upperLimit,
Condition.OP_LESS_THAN);
ConditionListener zaman lowerLimit <değeri <upperLimit bildirilecektir
channelObj.addCondition (Dinleyiciyi yeni RangeCondition (lowerLimit, Condition.OP_GREATER_THAN_OR_EQUALS,
upperLimit, Condition.OP_LESS_THAN_OR_EQUALS);
ConditionListener bildirilecektir zaman lowerLimit <= değer <= upperLimit.
ObjectCondition
elde edilen değere ObjectCondition denetler set limit eşitlik. Bu durum bir kanal, veri türünü içindir ChannelInfo.TYPE_OBJECT olduğunu.
Eşitlik () set limit yöntemi eşittir kullanılarak kontrol edilir. ObjectCondition ZORUNLU değişmez olabilir.
...
private void addConditions () (
özel statik final ObjectCondition ObjCond =
Yeni ObjectCondition (new Object () (public boolean (Object o) (gerçek ;}}); dönmek eşittir
ChannelInfo [] cInfos = sensor.getSensorInfo (). GetChannelInfos ();
int i = 0, len (değer = cInfos.length; i <len; i) (
Kanal kanal = sensor.getChannel (cInfos );
cInfos (eğer. getDataType () == ChannelInfo.TYPE_OBJECT) (
channel.addCondition (bu, ObjCond);
devam;
)
)
)
...
Sensör Deaktivasyon
Sensörü devre dışı bırakılması yapılmalıdır senin MIDlet kez artık sensörü gerektirir. Sensörü devre dışı bırakılması removeDataListener yoluyla () SensorConnection sınıfında yöntem yapılır. removeDataListener () DataListener kaldırır bu SensorConnection kayıtlı. DataListener dataReceived () bildirimleri alma durur.
public void disconnectSensor ()
(
...
(Sensör eğer! = )
(
sensor.removeDataListener ();
(Deneyin
sensor.close ();
) (Catch IOException e) (
e. printStackTrace ();
)
)
...
() NotifyDestroyed;
)
Tespit Sensör API varlığı:
yakışıklı destek Sensör API olmadığını kontrol etmek için;
System.getProperty ("microedition.sensor.version").
kullanılabilir. destekliyorsa, sensör sürümü başka boş iade edilecektir iade edilir.
Güvenlik ve İzinler
kullanıcı izinleri eylemi gerçekleştirmek için gerekli yoksa bu API bazı yöntemleri SecurityException atmaya tanımlanır. Bu API bazı sensörlerin kullanımı kısıtlamak için üç izinleri belirtir. Bunlar:
Özel Sensör:
Özel sensörler gizli verileri kullanıcıya maruz istemiyor kolu sensörleri vardır. Örnekler sensörler sağlık, ilgili veya kalp hızı sensörü veya terazi gibi servet içerir.
Korumalı Sensör:
Korumalı Sensörler sistemine sınırlı erişimi olan sistem sensörleri vardır. Sistem sensörler gizli kolu olabilir ya da sistem kaynaklarını korumalı. Veri bu sensörler sadece uygulamalar güvenilir sağlanmaktadır.
Kamu Sensör:
özel veya korunan değildir Sensörler kamu sensörler olarak anlaşılmaktadır. Tüm bu sensör gruplar, korumalı özel ve kamu, javax.microedition.io.Connector.sensor izin bağlantı açmak gerekir.
Aşağıdaki tablo, izinleri ve her izin korunmaktadır yöntemleri ile ilgili sensör üç adlarını tanımlar.
Tablo 4: İzin Tablo
İzinler adı bu İzin tarafından korunmaktadır Yöntemleri
javax.microedition.sensor.PrivateSensor Connector.open (), PushRegistry.registerConnection ()
javax.microedition.sensor.ProtectedSensor Connector.open (), PushRegistry.registerConnection ()
javax.microedition.io.Connector.sensor Connector.open ()
PushRegistry
PushRegistry Sensör uygulama otomatik olarak başlatmak için kullanılabilir. Uygulama kayıtlı olduğu, sensör URL başlatılması için şartlar içeren birlikte uygulama ile açılacak belirtilir.
Uygulama yönetim yazılımı (AMS) tanımlanan sensörleri izler. Ne zaman sensör kullanılabilir veya takip şartlarının olur, AMS uygulama uyandı olmak ve o başlattı bulur karşılanmaktadır.
AMS mağaza uygulamasının otomatik başlatma takip koşulu karşılandı neden veri değeri, hem de bir araya geldi durum. Geçerliliği, belirsizlik ve zaman damgası bilgileri de saklanır.
PushRegistry iki şekilde kullanılabilir:
- Stok - tabanlı push
- Durum - tabanlı push
Stok tabanlı itmek
Sensor uygulaması otomatik sensör kullanılabilir hale soktu. Bazı sensörleri yer tabanlı bas mekanizması desteklemiyor olabilir.
Örneğin, bazı sensör her zaman mevcut olabilir ama durumu tabanlı bas desteklemiyor olabilir. sensör durumu tabanlı bas destekler İster yöntemi SensorInfo.isAvailabilityPushSupported () ile bulunabilir.
MIDlet statik durumu için JAD aşağıda gösterilmiştir tabanlı push kayıtlı:
MIDlet-Push-1: sensörü: hızlanma, sample.PushAcclApp *
MIDlet-İzinleri: javax.microedition.io.PushRegistry
Durum tabanlı itmek
Koşullar kanal başına ayarlanır. herhangi bir kanalı herhangi bir şartla sonra, kayıtlı uygulama başlatılır karşılanmaktadır. PushRegistry için URL şemasını Nesne veri türü kanallar için şartları tanımlamak değildir sensörü.
bir sensör koşul tabanlı bas destekler İster yöntemi SensorInfo.isConditionPushSupported () ile bulunabilir. MIDlet statik durum için JAD aşağıda gösterilmiştir tabanlı push kayıtlı:
MIDlet-Push-1: sensörü: RR_interval? Kanal = RR_interval & limit = 240 & op = le, sample.PushCondApp *
MIDlet-İzinler: javax.microedition.io.PushRegistry, javax.microedition.sensor.PrivateSensor
Desteklenen RR_interval sensörleri çevresinde periyodik durumu AMS sistemi denetler. RR_interval sensörü mevcut ise, belirtilen şartlar kontrol edilir. durumlardan herhangi biri bir araya geldi ise, uygulama başlatılır. Yukarıdaki örnekte, ölçüm değeri az veya 240 ms eşit olma uygulaması başladı neden olur.
Sensör Örnek:
Aşağıdaki örnek örnek Sensör Bilgi almak için Sensör API kullanılacağını gösterir.
Sınıf: SensorMIDlet
ithalat java.io.IOException;
ithalat java.util.Vector;
ithalat javax.microedition.io.Connector;
ithalat javax.microedition.lcdui.Command;
ithalat javax.microedition.lcdui.CommandListener;
ithalat javax.microedition.lcdui.Display;
ithalat javax.microedition.lcdui.Displayable;
ithalat javax.microedition.lcdui.List;
ithalat javax.microedition.lcdui.Canvas;
ithalat javax.microedition.midlet.MIDlet;
ithalat javax.microedition.sensor.ChannelInfo;
ithalat javax.microedition.sensor.Data;
ithalat javax.microedition.sensor.DataListener;
ithalat javax.microedition.sensor.SensorConnection;
ithalat javax.microedition.sensor.SensorInfo;
ithalat javax.microedition.sensor.SensorManager;
public class SensorMIDlet MIDlet uygular uzanır DataListener, CommandListener (
özel statik final Komutanlığı CMD_SELECT = new Komutanlığı ("Select", Command.SCREEN, 1);
özel statik final Komutanlığı CMD_EXIT = new Komutanlığı ("Çıkış", Command.EXIT, 1);
özel SensorConnection sensörü;
Özel String [] channelNames;
Özel SensorInfo [] sensorInfos;
özel boolean sensorSelected;
özel Listesi sensorSelector;
özel SensorCanvas sensorCanvas;
/ * Ilklendir MIDlet ve ivmeölçer sensörü algılar. * /
kamu SensorMIDlet () (IOException atar
(System.getProperty ("microedition.sensor.version") == ) (if
("JSR256 desteklenmiyor!") Yeni IllegalArgumentException atmak;
)
sensorCanvas = new SensorCanvas (this);
sensorInfos = getSensorInfos ();
(SensorInfos == ) (if
Yeni IllegalArgumentException (atmak
"Geçerli accelerometer") bulunamadı sensörü;
)
sensorSelector = new List ("Select accelerometer:" List.EXCLUSIVE);
int i = 0 (için; i <sensorInfos.length; i) (
(SensorInfos sensorSelector.append. GetUrl (), );
)
sensorSelector.addCommand (CMD_SELECT);
sensorSelector.addCommand (CMD_EXIT);
sensorSelector.setCommandListener (this);
)
void startApp () (public
If (! SensorSelected) (
Display.getDisplay (this). (SensorSelector) setCurrent;
) Else (
Display.getDisplay (this). (SensorCanvas) setCurrent;
sensor.setDataListener (Bu, 1);
)
)
void pauseApp () (public
sensor.removeDataListener ();
)
public void destroyApp (koşulsuz) boolean
(
(Sensör eğer! = ) (
(Deneyin
sensor.removeDataListener ();
sensor.close ();
) (IOException ex) (yakalamak
ex.printStackTrace ();
)
)
() NotifyDestroyed;
)
public void commandAction (Command c, Görüntülenebilir d) (
(Eğer d.equals (sensorSelector))
(
(Eğer CMD_SELECT.equals (c))
(
Yeni Konu ()
(
public void run ()
(
int idx = sensorSelector.getSelectedIndex ();
channelNames = getSensorInfoChannelsNames (sensorInfos [idx]);
denemek
(
sensörü = (SensorConnection) Connector.open (sensorInfos [idx]. getUrl ());
= True sensorSelected;
Display.getDisplay (SensorMIDlet.this). SetCurrent (sensorCanvas);
sensor.setDataListener (SensorMIDlet.this, 1);
) (IOException e) (e.printStackTrace () yakalamak
)
). () Başlar;
) Else if (CMD_EXIT.equals (c))
(
destroyApp (false);
() NotifyDestroyed;
)
)
)
/ * Pass sensorCanvas ivme verilerini .* /
public void () SensorConnection sensörü, Data [] data, boolean isDataLost dataReceived
(
Çift accelX = 0;
Çift accelY = 0;
Çift accelZ = 0;
int i = 0 (için; i <data.length; i)
(
(Eşittir channelNames [0] (eğer. Veri . GetChannelInfo (). GetName ()))
(
accelX = veri . getDoubleValues () [0];
) Else
(Eşittir (channelNames [1] eğer. Veri . GetChannelInfo (). GetName ()))
(
accelY = veri . getDoubleValues () [0];
) Else
(Eşittir channelNames [2] (eğer. Veri . GetChannelInfo (). GetName ()))
(
accelZ = veri . getDoubleValues () [0];
)
)
sensorCanvas.setValues (accelX, accelY, accelZ);
)
/ * Algılama uygun sensör bilgi. * /
Özel SensorInfo [] getSensorInfos ()
(
/ * Tüm aygıt accelerometers * Bul /
SensorInfo [] sensorInfos =
SensorManager.findSensors ("ivme" SensorInfo.CONTEXT_TYPE_DEVICE);
Vektör validInfos = new Vector ();
int i = 0 (için; i <sensorInfos.length; i) (
getSensorInfoChannelsNames (sensorInfos () eğer! = ) (
validInfos.addElement (sensorInfos );
)
)
SensorInfo [] ret = ;
()> 0) (validInfos.size (eğer
ret = new SensorInfo [validInfos.size ()];
validInfos.copyInto (ret);
)
geri ret;
)
/ * Sensörü için Detect geçerli kanal isimleri. * /
Özel String [] getSensorInfoChannelsNames (SensorInfo sensorInfo) (
Vektör = new Vector () channelNames;
ChannelInfo [] channelInfos = sensorInfo.getChannelInfos ();
(Eğer channelInfos.length> 1) (
/ * Accelerometer * En az 2 kanal desteği olması /
int i = 0 (için; i <channelInfos.length; i) (
(ChannelInfo.TYPE_DOUBLE == eğer channelInfos . GetDataType ()) (
/ * Kanal tipi double * olmalıdır /
channelNames.addElement (channelInfos . getName ());
)
)
()> 2) (channelNames.size (eğer
String [] isimler = new String [3];
isim [0] = (String) channelNames.elementAt (0);
isimler [1] = (String) channelNames.elementAt (1);
isimler [2] = (String) channelNames.elementAt (2);
geri isimleri;
)
)
return ;
)
)
Sınıf: SensorCanvas
ithalat java.io.IOException;
ithalat javax.microedition.lcdui.Canvas;
ithalat javax.microedition.lcdui.Graphics;
ithalat javax.microedition.lcdui.Image;
public class SensorCanvas Canvas Runnable uygular uzanır (
özel çift xChannel, yChannel, zChannel;
özel SensorMIDlet midlet;
kamu SensorCanvas (SensorMIDlet midlet) (
this.midlet = midlet;
setFullScreenMode (true);
Yeni Konu (this). start ();
)
public void run () (
denemek
(
(True) (süre
boyamanız ();
Thread.Sleep (100);
)
) (Catch InterruptedException e) ()
)
public void boya (Graphics g) (
g.setColor (255.255.255);
(0, 0, getWidth (), getHeight ()) g.fillRect;
g.setColor (0);
g.drawString ("Accelorometer Değerler", getWidth () / 2,10,17);
g.drawString ("X Channel" xChannel, getWidth () / 2,30, 17);
g.drawString ("Y Channel" yChannel, getWidth () / 2,50, 17);
g.drawString ("Z Channel" zChannel, getWidth () / 2,70, 17);
g.drawString ("Çıkış", 2, getHeight () -15,20);
)
public void setValues (double x, double y, çift z) (
xChannel = x;
yChannel = y;
zChannel = z;
)
public void (int keycode) (keyPressed
midlet.destroyApp (true);
)
)
İndirme
Bu makalede ayrıca Word ve PDF formatında indirilebilir. Için aşağıdaki linki tıklayınız indirmek için:
Mobil Sensör API
Dosya Ekleri
Sensor_Demo.zip (0.0MB)
Zirveler
[Sensör API Mobile] API'leri
[Kılavuzları] entegre Samsung SDK NetBe .. ile
[Teknik Dökümanlar] Java ME İzinleri
[] Scalable Vector 2D Graphi .. Başlarken
[] Ödeme API (JSR 229) API'leri
Listesine Geri Dön
İlgili Aygıt
GT-S5600
3.2MP Kamera H.263/Mpeg/H.264 Touch Ph
GT-S5230
3,2 piksel MPEG4, H.263, H.264, WMV T Mega
Yorum
No Başlığı Update
4 Yavaş ivme i8910 Java Acker 31 Ocak 2010 21:49 GMT 1 den örnekleme oranı sensörü
3 sensörleri ingenius 14 Aralık 2009 21:46 GMT 1
2 S5230 Amadeo 22 Eylül 2009 11:13 GMT 1
1 S5230 sorun OTA açmak zorundadır. Swapna, 2009 15:39 GMT 1 Ağustos 13