2016-05-13 10 views
8

我在我的應用程序中使用Android信標庫,並且我一字一寫地複製了他們的示例範例,但我不斷收到您在代碼下面看到的錯誤。任何幫助將不勝感激,我剛纔進入BTLE /標Android BTLE - >無法找到回調包裝

package com.example.josh.beacons; 

import android.os.Bundle; 
import android.os.RemoteException; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log; 

import org.altbeacon.beacon.Beacon; 
import org.altbeacon.beacon.BeaconConsumer; 
import org.altbeacon.beacon.BeaconManager; 
import org.altbeacon.beacon.BeaconParser; 
import org.altbeacon.beacon.RangeNotifier; 
import org.altbeacon.beacon.Region; 

import java.util.Collection; 

public class MainActivity extends AppCompatActivity implements BeaconConsumer { 
    protected static final String TAG = "RangingActivity"; 
    private BeaconManager beaconManager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     beaconManager = BeaconManager.getInstanceForApplication(this); 
     beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("m:2-3=beac,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25")); 
     beaconManager.bind(this); 
    } 
    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     beaconManager.unbind(this); 
    } 
    @Override 
    public void onBeaconServiceConnect() { 
     beaconManager.setRangeNotifier(new RangeNotifier() { 
      @Override 
      public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) { 
       if (beacons.size() > 0) { 
        Log.i(TAG, "The first beacon I see is about " + beacons.iterator().next().getDistance() + " meters away."); 
       } 
      } 
     }); 

     try { 
      beaconManager.startRangingBeaconsInRegion(new Region("myRangingUniqueId", null, null, null)); 
     } catch (RemoteException e) { } 
    } 
} 

錯誤,我得到:

05-12 20:21:44.769 25775-25775/com.example.josh.beacons D/BluetoothAdapter: STATE_ON 
05-12 20:21:44.770 25775-25775/com.example.josh.beacons D/BluetoothLeScanner: could not find callback wrapper 
05-12 20:21:44.787 25775-26783/com.example.josh.beacons D/RangingActivity: didRangeBeacons 0 
+0

您是否將「myRangingUniqueId」更改爲您的信標的UUID? –

+1

確實,我忘記了請求核心位置權限。問題解決了 – user3916570

回答

6

要小心,不要拿你的logcat看線看得太重,如果他們不從你自己的代碼。如果行以「D /」開頭,這表示一條調試線,而不是一個錯誤(「E /」),我已經構建了幾十個信標應用程序,看到該行的次數超過了我的數量,並且可以自信地說,這並不表示問題。

底線:您可以放心地忽略該消息。請注意,Android藍牙堆棧在LogCat中非常嘈雜。這不會是你學會忽略的第一行。

+0

那麼,我無法弄清楚爲什麼我要檢測0個信標。認爲這可能是原因。 – user3916570

+0

我剛剛開始獲取「STATE_ON」和「無法找到回調包裝」日誌,因爲那時我的應用程序無法檢測到信標(以前工作過)。我使用三星S6 6.0.1,並沒有改變一件事。可能連接到https://code.google.com/p/android/issues/detail?id=191831#c64 相同的應用程序仍然適用於其他手機。奇怪的是:beaconinside的Beaconmanager應用程序仍能檢測到信標。 – Zuop

+0

所以「**無法找到回調包裝**」可以安全地忽略? –

5

雖然你可以,除了例外的答案說,安全地忽略這條消息,它告訴你一些東西。最有可能的是它告訴你,你的設備已關閉了位置權限,以防止你的信標掃描工作。如果應用適當的權限和正在正確掃描,你會看到更多的東西一樣

D/BluetoothAdapter: STATE_ON 
D/BluetoothLeScanner: onClientRegistered() - status=0 clientIf=5 

如果你的目標API級別23+,即使你minsdk設定得較低(如16),你一定要檢查您的位置權限代碼已啓用。

我意識到這只是沉默失敗,因爲位置服務被關閉的應用程序之前,我失去了很多小時。

+1

〜「**最有可能告訴你,你的設備已關閉位置權限**」。對我而言並非如此。 –

+0

這是問題的正確答案。 – samir