Java 使用感知API it获取信标围栏';It’这太费时了,而且不准确
这是我的口供代码。时间太长,不能提供准确的信息。我找到了两个失物招领处 //beaconceActivity.javaJava 使用感知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
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