针对谷歌跳舞和GoogleDance这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展2013谷歌开发者节(GoogleDevFest)北京站、android–使用GoogleFitapi时谷
针对谷歌跳舞和GoogleDance这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展2013 谷歌开发者节(Google DevFest)北京站、android – 使用Google Fit api时谷歌Oauth 2.0 RESULT_CANCELED、android – 无法解析目标’Google Inc.:Google API:16′、com.google.android.gms.maps.GoogleMap.CancelableCallback的实例源码等相关知识,希望可以帮助到你。
本文目录一览:- 谷歌跳舞(GoogleDance)(谷歌的舞蹈)
- 2013 谷歌开发者节(Google DevFest)北京站
- android – 使用Google Fit api时谷歌Oauth 2.0 RESULT_CANCELED
- android – 无法解析目标’Google Inc.:Google API:16′
- com.google.android.gms.maps.GoogleMap.CancelableCallback的实例源码
谷歌跳舞(GoogleDance)(谷歌的舞蹈)
谷歌跳舞这个名词一般用于描绘谷歌查找引擎对查找成果进行更新、重组的进程,谷歌一般每个月对其查找数据库进行一次更新,新的网页被参加,无效网页被删去,对录入网站进行全面深度检索,也可能在这期间调整算法。
在“跳舞时期”(三到五天内),谷歌的查找成果会有大幅度的波动,简直每一分钟都会有改变,这一更新进程可以很容易地经过查找成果的显着改变来辨认,“跳舞”一般继续几天时刻,跳舞完毕后,Google查找成果和网站外部链接数量趋于稳定,直至下一个周期的到来。
2013 谷歌开发者节(Google DevFest)北京站
谷歌开发者节(Google DevFest) https://developers.google.com/events/devfest/ 是 全球各地 Google 技术社区组织的本地大型开发者活动,包含多种产品和技术的讲座以及 Code Lab 等活动形式。今年国内有10余个 GDG 社区组织了 DevFest 活动,包括北京、上海、珠海、厦门、西安等。经过一个多月的准备,北京的 DevFest 将于10月26日举行(全天)。大会官网是 http://devfest.bjgdg.org/ 。
北京 DevFest 共有 10 场演讲内容,内容涉及 Web & HTML5、Chrome、Android、Google云平台技术,还有 WebRTC、Web Component & Polymer、Dart 等内容。讲师有来自 Google 的工程师、国内架构师和优秀开发者。精彩不容错过!
android – 使用Google Fit api时谷歌Oauth 2.0 RESULT_CANCELED
在我的应用中,我在这里得到RESULT_CANCELED:
@Override protected void onActivityResult(int requestCode,int resultCode,Intent data) { super.onActivityResult(requestCode,resultCode,data); if( requestCode == REQUEST_OAUTH ) { authInProgress = false; if( resultCode == RESULT_OK ) { if( !mClient.isConnecting() && !mClient.isConnected() ) { mClient.connect(); } } else if( resultCode == RESULT_CANCELED ) {/// HERE Toast.makeText(MainActivity.this,"RESULT_CANCELED",Toast.LENGTH_SHORT).show(); Log.e("GoogleFit","RESULT_CANCELED"); Log.e("GoogleFit",data.getExtras().toString()); } }else if(requestCode == CALL_END){ if (resultCode == Activity.RESULT_OK){ //pass }else{ } } else { Log.e("GoogleFit","requestCode NOT request_oauth"); } }
试着找出过去两天的问题.我在android studio中添加了正确的播放服务库:compile’com.google.android.gms:play-services-fitness:8.4.0′
建立客户:
private void buildfitnessClient() { if (mClient == null && checkPermissions()) { Log.i(TAG,"Building fitness Client"); mClient = new Googleapiclient.Builder(this) .addApi(fitness.SENSORS_API) .addScope(new Scope(Scopes.fitness_ACTIVITY_READ_WRITE)) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .build(); mClient.connect(); } }
回调:
/** * GOOGLE FIT METHODS */ @Override public void onConnected(@Nullable Bundle bundle) { DataSourcesRequest dataSourceRequest = new DataSourcesRequest.Builder() .setDataTypes( DataType.TYPE_STEP_COUNT_CUMULATIVE ) .setDataSourceTypes( DataSource.TYPE_RAW ) .build(); ResultCallback<DataSourcesResult> dataSourcesResultCallback = new ResultCallback<DataSourcesResult>() { @Override public void onResult(DataSourcesResult dataSourcesResult) { for( DataSource dataSource : dataSourcesResult.getDataSources() ) { if( DataType.TYPE_STEP_COUNT_CUMULATIVE.equals( dataSource.getDataType() ) ) { registerfitnessDataListener(dataSource,DataType.TYPE_STEP_COUNT_CUMULATIVE); } } } }; fitness.SensorsApi.findDataSources(mClient,dataSourceRequest) .setResultCallback(dataSourcesResultCallback); } @Override public void onConnectionSuspended(int i) { } @Override public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { if( !authInProgress ) { try { authInProgress = true; connectionResult.startResolutionForResult( MainActivity.this,REQUEST_OAUTH ); } catch(IntentSender.SendIntentException e ) { } } else { Log.e( "GoogleFit","authInProgress" ); } } @Override public void onDataPoint(DataPoint dataPoint) { for( final Field field : dataPoint.getDataType().getFields() ) { final Value value = dataPoint.getValue( field ); runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(getApplicationContext(),"Field: " + field.getName() + " Value: " + value,Toast.LENGTH_SHORT).show(); HealthRecordFragment.mStepsWalking.setText(value.toString()); } }); } }
在Gradle中:
apply plugin: 'com.android.application' android { compileSdkVersion 23 buildToolsversion "23.0.1" defaultConfig { applicationId "com.xxxx.xxxx" minSdkVersion 15 targetSdkVersion 23 versionCode 1 versionName "1.0" } signingConfigs { release { storeFile file("C:\\Users\\xxxxx\\AndroidStudioProjects\\HBEAT2\\app\\hbeat_android") storePassword "password" keyAlias "hbeat_android" keyPassword "password" } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro' } } } dependencies { compile filetree(dir: 'libs',include: ['*.jar']) compile 'com.google.android.gms:play-services-fitness:8.4.0' compile 'com.android.support:appcompat-v7:23.1.1' compile "com.android.support:design:23.2.1" compile 'com.github.rahatarmanahmed:circularprogressview:2.4.0' compile 'de.timroes.android:EnhancedListView:0.3.0' }
解决方法
我的Google Api客户端无法仅在生产环境中连接,在开发环境中一切正常.
这是因为我的应用程序设置为使用“App Signing”.这样,如果您使用生产密钥库的SHA1(或图片中的上载证书的SHA1)创建了Oauth客户端ID,则不会使用它,因为谷歌将删除此证书并更改为“应用程序签名”证书
因此,我们需要做的就是修复问题只需使用这个新的SHA1创建一个新的OAuth客户端ID,如下所示:
这个问题很容易遇到,因为大多数教程都会告诉您找到您的Production SHA1并在API控制台中使用它.但是,除非您使用“应用程序签名”,否则它将不再起作用.
android – 无法解析目标’Google Inc.:Google API:16′
但它不需要API-8,它需要API-16,我不知道该怎么做.
解决方法
com.google.android.gms.maps.GoogleMap.CancelableCallback的实例源码
/** * Called when the Animate To "Go To Analog Stick" button is clicked. */ public void onGoToVrController(View view) { if (!checkReady()) { return; } changeCamera(CameraUpdateFactory.newCameraPosition(vrControllerCameraPos),new CancelableCallback() { @Override public void onFinish() { Toast.makeText(getBaseContext(),"Animation to Analog Stick complete",Toast.LENGTH_SHORT) .show(); } @Override public void onCancel() { Toast.makeText(getBaseContext(),"Animation to Analog Stick canceled",Toast.LENGTH_SHORT) .show(); } }); }
@Override public boolean onMyLocationButtonClick() { if (location != null) { LatLng latLng = new LatLng(location.getLatitude(),location.getLongitude()); float zoom = map.getCameraPosition().zoom < 15 ? 15 : map.getCameraPosition().zoom; map.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng,zoom),new CancelableCallback() { @Override public void onCancel() { mapWrapper.setonMapPanListener(MapFragment.this); followMe = true; } @Override public void onFinish() { mapWrapper.setonMapPanListener(MapFragment.this); followMe = true; } }); } return true; }
public void setLocation(final double latitude,final double longitude,final int zoom) { CameraUpdate update; if (-1 == zoom) { update = CameraUpdateFactory.newLatLng(new LatLng(latitude,longitude)); } else { update = CameraUpdateFactory.newLatLngZoom(new LatLng(latitude,longitude),zoom); } mMap.animateCamera(update,1000,new CancelableCallback() { @Override public void onFinish() { completeSetLocation(latitude,longitude,zoom); } @Override public void onCancel() { } }); }
/** * Called when the Animate To Sydney button is clicked. */ public void onGoToSydney(View view) { if (!checkReady()) { return; } changeCamera(CameraUpdateFactory.newCameraPosition(SYDNEY),"Animation to Sydney complete","Animation to Sydney canceled",Toast.LENGTH_SHORT) .show(); } }); }
/** * Called when the Animate To Sydney button is clicked. */ public void onGoToSydney(View view) { if (!checkReady()) { return; } changeCamera(CameraUpdateFactory.newCameraPosition(SYDNEY),Toast.LENGTH_SHORT) .show(); } }); }
/** * Called when the Animate To Sydney button is clicked. */ public void onGoToSydney(View view) { if (!checkReady()) { return; } changeCamera(CameraUpdateFactory.newCameraPosition(SYDNEY),Toast.LENGTH_SHORT) .show(); } }); }
/** * Change the camera position by moving or animating the camera depending on the state of the * animate toggle button. */ private void changeCamera(CameraUpdate update,CancelableCallback callback) { boolean animated = ((CompoundButton) findViewById(R.id.animate)).isChecked(); if (animated) { mMap.animateCamera(update,callback); } else { mMap.moveCamera(update); } }
@Override public void onMapReady(GoogleMap googleMap) { map = googleMap; map.setMapType(GoogleMap.MAP_TYPE_NONE); map.setonInfoWindowClickListener(this); map.setonMapClickListener(this); map.setonMarkerClickListener(this); map.setonMapLongClickListener(this); LatLng latLng = new LatLng(0.0,0.0); float zoom = map.getCameraPosition().zoom < 1 ? 1 : map.getCameraPosition().zoom; map.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng,new CancelableCallback() { @Override public void onCancel() { // Todo } @Override public void onFinish() { // Todo } }); offlineMap = new OfflineMap(map); offlineMap.setVisible(true); geoPackageMapOverlays = new GeoPackageMapOverlays(getActivity(),mapView,map); refreshMapMarkers(); }
/** * Change the camera position by moving or animating the camera depending on the state of the * animate toggle button. */ private void changeCamera(CameraUpdate update,CancelableCallback callback) { if (mAnimatetoggle.isChecked()) { if (mCustomDurationToggle.isChecked()) { int duration = mCustomDurationBar.getProgress(); // The duration must be strictly positive so we make it at least 1. mMap.animateCamera(update,Math.max(duration,1),callback); } else { mMap.animateCamera(update,callback); } } else { mMap.moveCamera(update); } }
/** * Change the camera position by moving or animating the camera depending on the state of the * animate toggle button. */ private void changeCamera(CameraUpdate update,callback); } } else { mMap.moveCamera(update); } }
/** * Change the camera position by moving or animating the camera depending on * input parameter. */ private void changeCamera(CameraUpdate update,CancelableCallback callback,boolean instant) { if (instant) { mMap.animateCamera(update,1,callback); } else { mMap.animateCamera(update,4000,callback); } }
public boolean showMarkerInfoWindow(ContactsItem contact,boolean animate) { if (mMap == null || contact == null) { return false; } final Marker marker = mContactMarkerHashMap.get(contact.hashCode()); if (marker == null) { return false; } if (animate) { mMap.animateCamera( CameraUpdateFactory.newCameraPosition( new CameraPosition.Builder() .target(marker.getPosition()) .zoom(15.5f) .build() ),new CancelableCallback() { @Override public void onCancel() { } @Override public void onFinish() { marker.showInfoWindow(); } } ); } else { marker.showInfoWindow(); } return true; }
/** * Show the InfoWindow for the passed Marker and ClusterPoint * * @param marker * @param clusterPoint */ public void showInfoWindow(Marker marker,ClusterPoint clusterPoint) { GoogleMap map = mapRef.get(); if (map != null && marker != null && clusterPoint != null) { long dirtyUntil = System.currentTimeMillis() + options.getShowInfoWindowAnimationDuration(); innerCallbackListener.clusteringOnCamerachangelistener.setDirty(dirtyUntil); CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLng(marker.getPosition()); map.animateCamera(cameraUpdate,options.getShowInfoWindowAnimationDuration(),new CancelableCallback() { @Override public void onFinish() { innerCallbackListener.handler.post(new Runnable() { @Override public void run() { innerCallbackListener.clusteringOnCamerachangelistener.setDirty(0); } }); } @Override public void onCancel() { innerCallbackListener.clusteringOnCamerachangelistener.setDirty(0); } }); marker.showInfoWindow(); } }
@Override public final void animateCamera(CameraUpdate update,CancelableCallback callback) { map.animateCamera(update,callback); }
@Override public final void animateCamera(CameraUpdate update,int durationMs,durationMs,callback); }
public void animateCamera(CameraUpdate update,CancelableCallback callback){ this.map.animateCamera(update,callback); }
@Override public final void animateCamera(CameraUpdate update,callback); }
public void animateCamera(CameraUpdate update,callback); }
@Override public final void animateCamera(CameraUpdate update,callback); }
@Override public void OnDirectionListReceived(List<LatLng> mPointList) { if (mPointList != null) { polylineoptions rectLine = new polylineoptions().width(10).color( Color.RED); for (int i = 0; i < mPointList.size(); i++) { rectLine.add(mPointList.get(i)); } mMap.addpolyline(rectLine); CameraPosition mCPFrom = new CameraPosition.Builder() .target(startPosition).zoom(15.5f).bearing(0).tilt(25) .build(); final CameraPosition mCPTo = new CameraPosition.Builder() .target(destinationPosition).zoom(15.5f).bearing(0) .tilt(50).build(); changeCamera(CameraUpdateFactory.newCameraPosition(mCPFrom),new CancelableCallback() { @Override public void onFinish() { changeCamera(CameraUpdateFactory .newCameraPosition(mCPTo),new CancelableCallback() { @Override public void onFinish() { LatLngBounds bounds = new LatLngBounds.Builder() .include(startPosition) .include( destinationPosition) .build(); changeCamera( CameraUpdateFactory .newLatLngBounds( bounds,50),null,false); } @Override public void onCancel() { } },false); } @Override public void onCancel() { } },true); } }
/** * Change the camera position by moving or animating the camera depending on the state of the * animate toggle button. */ private void changeCamera(CameraUpdate update,CancelableCallback callback) { mMap.moveCamera(update); }
void animateCamera(CameraUpdate update,CancelableCallback callback);
void animateCamera(CameraUpdate update,CancelableCallback callback);
void animateCamera(CameraUpdate update,CancelableCallback callback);
void animateCamera(CameraUpdate update,CancelableCallback callback);
今天的关于谷歌跳舞和GoogleDance的分享已经结束,谢谢您的关注,如果想了解更多关于2013 谷歌开发者节(Google DevFest)北京站、android – 使用Google Fit api时谷歌Oauth 2.0 RESULT_CANCELED、android – 无法解析目标’Google Inc.:Google API:16′、com.google.android.gms.maps.GoogleMap.CancelableCallback的实例源码的相关知识,请在本站进行查询。
本文标签: