Java 使用感知API it获取信标围栏';It’这太费时了,而且不准确

Java 使用感知API it获取信标围栏';It’这太费时了,而且不准确,java,android,google-awareness,Java,Android,Google Awareness,这是我的口供代码。时间太长,不能提供准确的信息。我找到了两个失物招领处 //beaconceActivity.java import android.Manifest; import android.app.PendingIntent; import android.app.ProgressDialog; import android.content.BroadcastReceiver; import android.content.Context; import android.content

这是我的口供代码。时间太长,不能提供准确的信息。我找到了两个失物招领处

//beaconceActivity.java

import android.Manifest;
import android.app.PendingIntent;
import android.app.ProgressDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

import com.azilen.awarenessapidemo.R;
import com.google.android.gms.awareness.Awareness;
import com.google.android.gms.awareness.fence.AwarenessFence;
import com.google.android.gms.awareness.fence.BeaconFence;
import com.google.android.gms.awareness.fence.FenceState;
import com.google.android.gms.awareness.fence.FenceUpdateRequest;
import com.google.android.gms.awareness.state.BeaconState;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.ResultCallback;
import com.google.android.gms.common.api.ResultCallbacks;
import com.google.android.gms.common.api.Status;

import java.util.Arrays;
import java.util.List;

public class BeaconFenceActivity extends AppCompatActivity {

    private GoogleApiClient mGoogleApiClient;
    private static final int PERMISSION_REQUEST_ACCESS_FINE_LOCATION = 940;
    private TextView txtBeacon;


    private static final String BEACON_FENCE_KEY = "BEACON_FENCE_KEY";
    private static final int BEACON_ZONE_IN = 2;
    private static final int BEACON_ZONE_OUT = 1;

    private PendingIntent mPendingIntent;
    private BeaconFenceReceiver mBeaconFenceReceiver;
    private ProgressDialog mProgress;

    //Replace this with app's Google project name
    private static final List<BeaconState.TypeFilter> BEACON_TYPE_FILTERS = Arrays.asList
            (BeaconState.TypeFilter.with("awarenessapidemo-158205", "beacondemo"));

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_beacon_fence);
        mProgress = new ProgressDialog(BeaconFenceActivity.this);
        mProgress.setTitle("Geting Near Beacon");
        mProgress.setMessage("Please wait..");

        txtBeacon = (TextView) findViewById(R.id.txt_fence_beacon);
        mGoogleApiClient = new GoogleApiClient.Builder(BeaconFenceActivity.this).addApi(Awareness.API).build();
        mGoogleApiClient.connect();

        mBeaconFenceReceiver = new BeaconFenceReceiver();
        Intent intent = new Intent(BeaconFenceReceiver.BEACON_FENCE_RECEIVER_ACTION);
        mPendingIntent = PendingIntent.getBroadcast(BeaconFenceActivity.this, 1, intent, 0);
    }


    @Override
    protected void onStart() {
        super.onStart();
        getBeaconDetails();
        registerReceiver(mBeaconFenceReceiver, new IntentFilter(BeaconFenceReceiver.BEACON_FENCE_RECEIVER_ACTION));
    }

    @Override
    protected void onStop() {
        super.onStop();
        unregisterFences();
        unregisterReceiver(mBeaconFenceReceiver);
    }


    private void getBeaconDetails() {
        mProgress.show();
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                    PERMISSION_REQUEST_ACCESS_FINE_LOCATION);
            mProgress.hide();
        } else {
            AwarenessFence beaconFoundFence = BeaconFence.found(BEACON_TYPE_FILTERS);
            AwarenessFence lostFence = BeaconFence.lost(BEACON_TYPE_FILTERS);
            AwarenessFence orFence = AwarenessFence.or(lostFence, beaconFoundFence);

            Awareness.FenceApi.updateFences(mGoogleApiClient,
                    new FenceUpdateRequest.Builder()
                            .addFence(BEACON_FENCE_KEY, orFence, mPendingIntent)
                         /* .addFence(BEACON_FENCE_KEY, beaconFoundFence, mPendingIntent)
                            .addFence(BEACON_FENCE_KEY, lostFence, mPendingIntent)
                           */
                            .build()).setResultCallback(new ResultCallback<Status>() {
                @Override
                public void onResult(@NonNull Status status) {
                    if (status.isSuccess()) {
                        Toast.makeText(BeaconFenceActivity.this, "Fence Registered", Toast.LENGTH_SHORT).show();
                    } else {
                        Toast.makeText(BeaconFenceActivity.this, "Fence Not Registered", Toast.LENGTH_SHORT).show();
                    }
                }
            });
            mProgress.hide();
        }
    }

    private void unregisterFences() {
        Awareness.FenceApi.updateFences(
                mGoogleApiClient,
                new FenceUpdateRequest.Builder()
                        .removeFence(BEACON_FENCE_KEY)
                        .build()).setResultCallback(new ResultCallbacks<Status>() {
            @Override
            public void onSuccess(@NonNull Status status) {
                Toast.makeText(BeaconFenceActivity.this, "Fence Removed", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onFailure(@NonNull Status status) {
                Toast.makeText(BeaconFenceActivity.this, "Fence Not Removed", Toast.LENGTH_SHORT).show();
            }
        });

    }

    public void checkRestart(View view) {
        getBeaconDetails();
        registerReceiver(mBeaconFenceReceiver, new IntentFilter(BeaconFenceReceiver.BEACON_FENCE_RECEIVER_ACTION));
    }

    public class BeaconFenceReceiver extends BroadcastReceiver {

        public static final String BEACON_FENCE_RECEIVER_ACTION = "com.azilen.awarenessapidemo.activities.fence.BeaconFenceReceiver.BEACON_FENCE_RECEIVER_ACTION";

        @Override
        public void onReceive(Context context, Intent intent) {
            Log.e("Recived", "Received a Beacon Fence Broadcast");
            FenceState fenceState = FenceState.extract(intent);
            Log.e("FenceState Status:-", String.valueOf(fenceState.getFenceKey()));
            if (TextUtils.equals(fenceState.getFenceKey(), BEACON_FENCE_KEY)) {
                Log.e("FenceState:-", String.valueOf(fenceState.getCurrentState()));
                switch (fenceState.getCurrentState()) {
                    case FenceState.TRUE: {
                        setBeaconState(BEACON_ZONE_IN);
                        Toast.makeText(BeaconFenceActivity.this, "You've entered the beacon zone!", Toast.LENGTH_SHORT).show();
                        Log.e("Beacon", "In Range");
                        break;
                    }
                    case FenceState.FALSE: {
                        setBeaconState(BEACON_ZONE_OUT);
                        Log.e("Beacon", "Out of Range");
                        Toast.makeText(BeaconFenceActivity.this, "You've Out of beacon Range!", Toast.LENGTH_SHORT).show();
                        break;
                    }
                    case FenceState.UNKNOWN: {
                        setBeaconState(FenceState.UNKNOWN);
                        Log.e("Beacon", "UNKNOWN");
                        Toast.makeText(BeaconFenceActivity.this, "Oops, Beacon status is unknown!", Toast.LENGTH_SHORT).show();
                        break;
                    }
                }


            }
        }
    }

    private void setBeaconState(int beaconState) {
        if (beaconState == BEACON_ZONE_IN) {
            txtBeacon.setText("You've entered the beacon zone!");
        } else if (beaconState == BEACON_ZONE_OUT) {
            txtBeacon.setText("You're not in the beacon zone..");
        } else {
            txtBeacon.setText("Oops, Beacon status is unknown!");
        }
    }
}
导入android.Manifest;
导入android.app.pendingent;
导入android.app.ProgressDialog;
导入android.content.BroadcastReceiver;
导入android.content.Context;
导入android.content.Intent;
导入android.content.IntentFilter;
导入android.content.pm.PackageManager;
导入android.os.Bundle;
导入android.support.annotation.NonNull;
导入android.support.v4.app.ActivityCompat;
导入android.support.v7.app.AppActivity;
导入android.text.TextUtils;
导入android.util.Log;
导入android.view.view;
导入android.widget.TextView;
导入android.widget.Toast;
导入com.azilen.awarenessapidemo.R;
导入com.google.android.gms.awareness.awareness;
导入com.google.android.gms.awareness.fence.AwarenessFence;
导入com.google.android.gms.aware.fence.beaconce;
导入com.google.android.gms.aware.fence.FenceState;
导入com.google.android.gms.aware.fence.FenceUpdateRequest;
导入com.google.android.gms.aware.state.BeaconState;
导入com.google.android.gms.common.api.GoogleAppClient;
导入com.google.android.gms.common.api.ResultCallback;
导入com.google.android.gms.common.api.ResultCallbacks;
导入com.google.android.gms.common.api.Status;
导入java.util.array;
导入java.util.List;
公共类BeaconFenceActivity扩展了AppCompatActivity{
私人GoogleapClient MGoogleapClient;
私有静态最终整数权限\请求\访问\精细\位置=940;
私有文本视图txtBeacon;
专用静态最终字符串BEACON\u FENCE\u KEY=“BEACON\u FENCE\u KEY”;
专用静态最终int信标\区域\ IN=2;
专用静态最终int信标\区域\输出=1;
私人悬而未决的侵权行为;
私人信标接收人;
私人进程;
//将此替换为应用程序的Google项目名称
专用静态最终列表信标\类型\过滤器=Arrays.asList
(BeaconState.TypeFilter.with(“awarenessapidemo-158205”、“beacondemo”);
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u beacon\u fence);
mProgress=newprogressdialog(beaconceactivity.this);
mProgress.setTitle(“靠近信标”);
mProgress.setMessage(“请稍候…”);
txtBeacon=(TextView)findViewById(R.id.txt\u fence\u beacon);
mGoogleApiClient=new-GoogleApiClient.Builder(beaconceactivity.this).addApi(Awareness.API.build();
mGoogleApiClient.connect();
mBeaconFenceReceiver=新的BeaconFenceReceiver();
意向意向=新意向(信标接收者、信标、围栏、接收者、行动);
mpendingent=pendingent.getBroadcast(beaconceActivity.this,1,intent,0);
}
@凌驾
受保护的void onStart(){
super.onStart();
getBeaconDetails();
registerReceiver(mBeaconFenceReceiver,新意图过滤器(信标接收器、信标接收器、接收器、动作));
}
@凌驾
受保护的void onStop(){
super.onStop();
注销围栏();
未注册接收方(MBE接收方);
}
私有void getBeaconDetails(){
mProgress.show();
if(ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS\u FINE\u LOCATION)!=PackageManager.permission\u已授予){
ActivityCompat.requestPermissions(这个新字符串[]{Manifest.permission.ACCESS\u FINE\u LOCATION},
权限\请求\访问\精细\位置);
mProgress.hide();
}否则{
AwarenessFence beacfundfence=beaconce.found(信标类型过滤器);
AwarenessFence lostFence=信标丢失(信标类型过滤器);
AwarenessFence或fence=AwarenessFence.或(损失,beacfundfence);
Aware.FenceApi.UpdateFunces(mGoogleApiClient,
新建FenceUpdateRequest.Builder()
.addFence(信标、围栏、或围栏、mpendingint)
/*.addFence(信标、围栏、信标、围栏、mpendingint)
.addFence(信标、围栏、键、丢失、提示内容)
*/
.build()).setResultCallback(新的ResultCallback()){
@凌驾
public void onResult(@NonNull状态){
if(status.issucess()){
Toast.makeText(beaconceActivity.this,“围栏注册”,Toast.LENGTH_SHORT.show();
}否则{
Toast.makeText(beaconceActivity.this,“围栏未注册”,Toast.LENGTH_SHORT.show();
}
}
});
mProgress.hide();
}
}
私有无效取消注册围栏(){
Awareness.FenceApi.updateFences(
MGoogleapClient,
新建FenceUpdateRequest.Builder()
.移除围栏(信标围栏钥匙)
.build()).setResultCallback(新的ResultCallbacks()){
@凌驾
成功时公共无效(@NonNull状态){
Toast.makeText(beaconceActivity.this,“栅栏已移除”,Toast.LENGTH_SHORT.show();
}
@凌驾
public void onFailure(@NonNull状态){
Toast.makeText(beaconceActivity.this,“围栏未移除”,Toast.LENGTH_SHORT.show();
}
});
}
公共无效检查重新启动(视图){
getBeaconDetails();
registerReceiver(mBeaconFenceReceiver,新意图过滤器(信标接收器、信标接收器、接收器、动作));
}
公共类BeanConcereceiver扩展了BroadcastRec