私の電話で3つのリモートサービスと通信するアプリケーションを開発しています。コミュニケーションのために私はどの方法が最も良いか(インテントまたはAIDL)を把握しようとしています。私は、それぞれ15バイトで4ストリーム/秒の速度でブルートゥース経由のストリームを受信し、今私はデータロギングを実行するために私のGPS位置を追加したい。 毎秒私のGPS位置が必要です。 requestLocationUpdatesの時間はちょうどヒントなので、毎秒最後の既知の場所を尋ねるタイマーを作成しました。gpsの場所を取得する際のエラー
残念ながら、私はAIDLを使用して通信しようとすると修正できないというエラーが発生しています。これの奇妙なのは、リモートサービスに受信したデータを渡すためにインテントを使用している場合、すべて正常に動作します。
誰でもお手伝いできますか?
ここに私のコード:
04-06:15:06:43.015:E/AndroidRuntime(844):致命的な例外:タイマ
private static final long MINIMUM_DISTANCE_CHANGE_FOR_UPDATES = 0; //meters private static final long MINIMUM_TIME_BETWEEN_UPDATES = 1000; //in Milliseconds private final MyLocationListener listener; private final LocationManager mLocationManager; private final List<String> providers; public Parser() { mLocationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); listener = new MyLocationListener(); listener.onProviderEnabled(LocationManager.GPS_PROVIDER); mLocationManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, MINIMUM_TIME_BETWEEN_UPDATES, MINIMUM_DISTANCE_CHANGE_FOR_UPDATES, listener); providers = mLocationManager.getProviders(true); timer = new Timer(); } public boolean parse(byte[] data) { gpsUpdater(); ... } private void gpsUpdater() { timer.scheduleAtFixedRate(new TimerTask() { Location l = null; @Override public void run() { for(String s: providers) { l = mLocationManager.getLastKnownLocation(s); if(l != null) { gps = true; latitude = l.getLatitude(); longitude = l.getLongitude(); } } } }, 0, MINIMUM_TIME_BETWEEN_UPDATES); } public class MyLocationListener implements LocationListener { @Override public void onLocationChanged(Location arg0) { //TODO Auto-generated method stub } @Override public void onProviderDisabled(String provider) { // TODO Auto-generated method stub } @Override public void onProviderEnabled(String provider) { // TODO Auto-generated method stub } @Override public void onStatusChanged(String provider, int status, Bundle extras) { // TODO Auto-generated method stub } }
、ここでは、私が得たエラーです-0 04-06 15:06:43.015:E/AndroidRuntime(844):java.lang.SecurityException:不正なインタフェースへのバインダー呼び出し 04-06 15:06:43.015:E/AndroidRuntime(844):android .os.Parcel.readException(Parcel.java:1322) 04-06 15:06:43.015:E/AndroidRuntime(844):android.os.Parce l.readException(Parcel.java:1276) 04-06 15:06:43.015:E/AndroidRuntime(844):android.location.ILocationManager $ Stub $ Proxy.getLastKnownLocation(ILocationManager.java:896) 04-06 15:06:43.015:E/AndroidRuntime(844):android.location.LocationManager.getLastKnownLocation(LocationManager.java:1020) 04-06 15:06:43.015:E/AndroidRuntime(844):at pt.ua. droidshark.handler.Parser $ 1.run(Parser.java:446) 04-06 15:06:43.015:E/AndroidRuntime(844):java.util.Timer $ TimerImpl.run(Timer.java:284)
ロケーションマネージャは、私のアプリにその場所を提供するために一種のaidlを使用し、AIDLを使用してすべての通信が行われたときに電話機がそのような情報量を処理できないことはありますか?私はインテントを使用するとうまく動作する理由を理解できず、AIDLを使用しているときにこのエラーが常に発生します。
PS:原因は、タイマーがサービスやアクティビティクラスにないことが原因である可能性があることを示唆しているので、コードを実行して同じ状況になったサービスを作成しました。インテントを使用してすべての通信が行われ、AIDLを使用しているときにエラーが発生した場合は正常に動作します。
はい、私にはこの許可が含まれています –