D
dboy
Neues Mitglied
- 0
Hi Leute,
ich versuche im Moment Google Play Services zu integrieren und scheitere dabei recht klanglos. :-(
Habe schon so gut wie jedes dafür verfügbare Tutorial gemacht und am Ende hat einfach nichts funktioniert. Langsam treibt es mich zur Verzweiflung.
Mein kleines erstes Ziel ist es, dass mir eine App einfach nur meine derzeitige Location anzeigt. Dieses soll anhand der Google Play Services API geschehen.
Zuletzt hatte ich folgende Tutorial durchgearbeitet (hoffe der Link geht in Ordnung?):
Integrating Google Play Services on Android - Tuts+ Code Tutorial
Set Up Google Play Services SDK | Android Developers
Kennt ihr vielleicht bessere Tutorials wo wirklich jeder Schritt erklärt wird und am Ende der komplette Code vorhanden ist? Gibt es zu der Thematik vielleicht ein gutes Buch was ich übersehen hatte? Ich kann den Fehler auch nicht wirklich lokalisieren. Beim Testen der App auf dem Nexus 5 wird die Anwendung geschlossen und dabei gibt es folgenden Fehler:
Hier der genutzte Code (denkt euch nix bei dem Namen, kam nur grad zufällig die bescheuerte Werbung im TV):
MainActivity:
Gradle:
Manifest:
Beste Grüße,
dboy
ich versuche im Moment Google Play Services zu integrieren und scheitere dabei recht klanglos. :-(
Habe schon so gut wie jedes dafür verfügbare Tutorial gemacht und am Ende hat einfach nichts funktioniert. Langsam treibt es mich zur Verzweiflung.
Mein kleines erstes Ziel ist es, dass mir eine App einfach nur meine derzeitige Location anzeigt. Dieses soll anhand der Google Play Services API geschehen.
Zuletzt hatte ich folgende Tutorial durchgearbeitet (hoffe der Link geht in Ordnung?):
Integrating Google Play Services on Android - Tuts+ Code Tutorial
Set Up Google Play Services SDK | Android Developers
Kennt ihr vielleicht bessere Tutorials wo wirklich jeder Schritt erklärt wird und am Ende der komplette Code vorhanden ist? Gibt es zu der Thematik vielleicht ein gutes Buch was ich übersehen hatte? Ich kann den Fehler auch nicht wirklich lokalisieren. Beim Testen der App auf dem Nexus 5 wird die Anwendung geschlossen und dabei gibt es folgenden Fehler:
Code:
ddms: Can't bind to local 8600 for debugger
ddmlib: Eine bestehende Verbindung wurde softwaregesteuert
durch den Hostcomputer abgebrochen
java.io.IOException: Eine bestehende Verbindung wurde softwaregesteuert
durch den Hostcomputer abgebrochen
at sun.nio.ch.SocketDispatcher.write0(Native Method)
at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:51)
at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93)
at sun.nio.ch.IOUtil.write(IOUtil.java:65)
at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:487)
at com.android.ddmlib.JdwpPacket.writeAndConsume(JdwpPacket.java:213)
at com.android.ddmlib.Client.sendAndConsume(Client.java:642)
at com.android.ddmlib.HandleHeap.sendREAQ(HandleHeap.java:348)
at com.android.ddmlib.Client.requestAllocationStatus(Client.java:488)
at com.android.ddmlib.DeviceMonitor.createClient(DeviceMonitor.java:835)
at com.android.ddmlib.DeviceMonitor.openClient(DeviceMonitor.java:803)
at com.android.ddmlib.DeviceMonitor.deviceClientMonitorLoop(DeviceMonitor.java:621)
at com.android.ddmlib.DeviceMonitor.access$100(DeviceMonitor.java:44)
at com.android.ddmlib.DeviceMonitor$3.run(DeviceMonitor.java:580)
Hier der genutzte Code (denkt euch nix bei dem Namen, kam nur grad zufällig die bescheuerte Werbung im TV):
MainActivity:
Code:
package com.example.imakeyousexydotcom.imysdc;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentSender;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.common.api.*;
import com.google.android.gms.drive.*;
public class MainActivity extends ActionBarActivity
implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {
private GoogleApiClient mGoogleApiClient;
// Request code to use when launching the resolution activity
private static final int REQUEST_RESOLVE_ERROR = 1001;
// Unique tag for the error dialog fragment
private static final String DIALOG_ERROR = "dialog_error";
// Bool to track whether the app is already resolving an error
private boolean mResolvingError = false;
private static final String STATE_RESOLVING_ERROR = "resolving_error";
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean(STATE_RESOLVING_ERROR, mResolvingError);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Start Connection
// GoogleApiClient.Builder class provides methods that allow you to specify
// the Google APIs you want to use
GoogleApiClient mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(Drive.API)
.addScope(Drive.SCOPE_FILE)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
mResolvingError = savedInstanceState != null
&& savedInstanceState.getBoolean(STATE_RESOLVING_ERROR, false);
}
@Override
public void onConnected (Bundle connectionHint){
// Connected to Google Play services!
// The good stuff goes here.
}
@Override
public void onConnectionSuspended(int cause) {
// The connection has been interrupted.
// Disable any UI components that depend on Google APIs
// until onConnected() is called.
}
@Override
public void onConnectionFailed(ConnectionResult result) {
if (mResolvingError) {
// Already attempting to resolve an error.
return;
} else if (result.hasResolution()) {
try {
mResolvingError = true;
result.startResolutionForResult(this, REQUEST_RESOLVE_ERROR);
} catch (IntentSender.SendIntentException e) {
// There was an error with the resolution intent. Try again.
mGoogleApiClient.connect();
}
} else {
// Show dialog using GooglePlayServicesUtil.getErrorDialog()
showErrorDialog(result.getErrorCode());
mResolvingError = true;
}
}
/* Creates a dialog for an error message */
private void showErrorDialog(int errorCode) {
// Create a fragment for the error dialog
ErrorDialogFragment dialogFragment = new ErrorDialogFragment();
// Pass the error that should be displayed
Bundle args = new Bundle();
args.putInt(DIALOG_ERROR, errorCode);
dialogFragment.setArguments(args);
dialogFragment.show(getSupportFragmentManager(), "errordialog");
}
/* Called from ErrorDialogFragment when the dialog is dismissed. */
public void onDialogDismissed() {
mResolvingError = false;
}
/* A fragment to display an error dialog */
public static class ErrorDialogFragment extends DialogFragment {
public ErrorDialogFragment() { }
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Get the error code and retrieve the appropriate dialog
int errorCode = this.getArguments().getInt(DIALOG_ERROR);
return GooglePlayServicesUtil.getErrorDialog(errorCode,
this.getActivity(), REQUEST_RESOLVE_ERROR);
}
@Override
public void onDismiss(DialogInterface dialog) {
((MainActivity)getActivity()).onDialogDismissed();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_RESOLVE_ERROR) {
mResolvingError = false;
if (resultCode == RESULT_OK) {
// Make sure the app is not already connected or attempting to connect
if (!mGoogleApiClient.isConnecting() &&
!mGoogleApiClient.isConnected()) {
mGoogleApiClient.connect();
}
}
}
}
@Override
protected void onStart() {
super.onStart();
if (!mResolvingError) { // more about this later
mGoogleApiClient.connect();
}
}
@Override
protected void onStop() {
mGoogleApiClient.disconnect();
super.onStop();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
Gradle:
Code:
apply plugin: 'android'
android {
compileSdkVersion 19
buildToolsVersion "19.0.0"
defaultConfig {
minSdkVersion 10
targetSdkVersion 19
versionCode 1
versionName "1.0"
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}
dependencies {
compile 'com.android.support:appcompat-v7:+'
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.google.android.gms:play-services:4.4.52'
}
Manifest:
Code:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.imakeyousexydotcom.imysdc" >
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.imakeyousexydotcom.imysdc.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<meta-data android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
</application>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
</manifest>
Beste Grüße,
dboy