2012-10-22 4 views
8

Ich habe eine einfache Anwendung mit ein paar Zeilen, weil ich versuche herauszufinden, warum meine reale Anwendung in GCMRegistrar.checkDevice (this) abstürzt (wenn ich es lösche meine Anwendung nicht abstürzt). Kann jemand helfen? :( :GCM: Warum stürzt meine Anwendung in GCMRegistrar.checkDevice (this);

public class DemoActivity extends Activity { 
private String TAG = "** pushAndroidActivity **"; 
private TextView mDisplay; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     GCMRegistrar.checkDevice(this); 
     GCMRegistrar.checkManifest(this); 
     setContentView(R.layout.main); 
     mDisplay = (TextView) findViewById(R.id.display); 
     mDisplay.setText("ciao"); 
} 

Manifest:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.registrazionegcm" 
android:versionCode="1" 
android:versionName="1.0" > 
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16" /> 
<permission android:name="com.example.registrazionegcm.permission.C2D_MESSAGE" 
    android:protectionLevel="signature" /> 
<uses-permission android:name="com.example.registrazionegcm.permission.C2D_MESSAGE" /> 
<!-- App receives GCM messages. --> 
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
<!-- GCM connects to Google Services. --> 
<uses-permission android:name="android.permission.INTERNET" /> 
<!-- GCM requires a Google account. --> 
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
<!-- Keeps the processor from sleeping when a message is received. --> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name=".DemoActivity" 
     android:label="@string/title_activity_demo" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <receiver 
     android:name="com.google.android.gcm.GCMBroadcastReceiver" 
     android:permission="com.google.android.c2dm.permission.SEND" > 
     <intent-filter> 
      <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
      <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 
      <category android:name="com.example.registrazionegcm" /> 
     </intent-filter> 
    </receiver> 
    <service android:name=".GCMIntentService" /> 
</application> 

Mein Fehler:

10-22 21:54:21.075: E/AndroidRuntime(955): FATAL EXCEPTION: main 
10-22 21:54:21.075: E/AndroidRuntime(955): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.registrazionegcm/com.example.registrazionegcm.DemoActivity}: java.lang.UnsupportedOperationException: Device does not have package com.google.android.gsf 
10-22 21:54:21.075: E/AndroidRuntime(955): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059) 
10-22 21:54:21.075: E/AndroidRuntime(955): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) 
10-22 21:54:21.075: E/AndroidRuntime(955): at android.app.ActivityThread.access$600(ActivityThread.java:130) 
10-22 21:54:21.075: E/AndroidRuntime(955): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) 
10-22 21:54:21.075: E/AndroidRuntime(955): at android.os.Handler.dispatchMessage(Handler.java:99) 
10-22 21:54:21.075: E/AndroidRuntime(955): at android.os.Looper.loop(Looper.java:137) 
10-22 21:54:21.075: E/AndroidRuntime(955): at android.app.ActivityThread.main(ActivityThread.java:4745) 
10-22 21:54:21.075: E/AndroidRuntime(955): at java.lang.reflect.Method.invokeNative(Native Method) 
10-22 21:54:21.075: E/AndroidRuntime(955): at java.lang.reflect.Method.invoke(Method.java:511) 
10-22 21:54:21.075: E/AndroidRuntime(955): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
10-22 21:54:21.075: E/AndroidRuntime(955): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
10-22 21:54:21.075: E/AndroidRuntime(955): at dalvik.system.NativeStart.main(Native Method) 
10-22 21:54:21.075: E/AndroidRuntime(955): Caused by: java.lang.UnsupportedOperationException: Device does not have package com.google.android.gsf 
10-22 21:54:21.075: E/AndroidRuntime(955): at com.google.android.gcm.GCMRegistrar.checkDevice(GCMRegistrar.java:98) 
10-22 21:54:21.075: E/AndroidRuntime(955): at com.example.registrazionegcm.DemoActivity.onCreate(DemoActivity.java:16) 
10-22 21:54:21.075: E/AndroidRuntime(955): at android.app.Activity.performCreate(Activity.java:5008) 
10-22 21:54:21.075: E/AndroidRuntime(955): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) 
10-22 21:54:21.075: E/AndroidRuntime(955): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023) 
10-22 21:54:21.075: E/AndroidRuntime(955): ... 11 more 
10-22 21:54:21.085: W/ActivityManager(167): Force finishing activity com.example.registrazionegcm/.DemoActivity 
10-22 21:54:21.095: W/WindowManager(167): Failure taking screenshot for (246x410) to layer 21010 
10-22 21:54:21.205: I/jdwp(265): Ignoring second debugger -- accepting and dropping 
10-22 21:54:21.395: I/Choreographer(167): Skipped 40 frames! The application may be doing too much work on its main thread. 
10-22 21:54:21.615: W/ActivityManager(167): Activity pause timeout for ActivityRecord{411d90d0 com.example.registrazionegcm/.DemoActivity} 
10-22 21:54:22.177: I/Choreographer(265): Skipped 120 frames! The application may be doing too much work on its main thread. 
10-22 21:54:32.339: W/ActivityManager(167): Activity destroy timeout for ActivityRecord{411d90d0 com.example.registrazionegcm/.DemoActivity} 

Antwort

21

Es ist wahrscheinlich auf einem Gerät ausgeführt wird, die nicht GCM unterstützt das, so Ihren Anruf zu GCMRegistrar.checkDevice(this); wirft eine Ausnahme. Überprüfen Sie Ihr logcat, um sicher zu sein.

Wenn Sie es auf einem Emulator testen, stellen Sie sicher, dass der Emulator für die Verwendung von Google APIs eingerichtet ist. Wenn Sie den Emulator erstellen, enthält das Fenster zum Erstellen eines neuen AVDs das Feld "Ziel". Wählen Sie in diesem Feld "Google APIs" aus.

create emulator with google api

+1

Ich habe die Fehler hinzugefügt. (Wie kann ich sicherstellen, dass ich den Emulator gesetzt haben, um Google Apis zu verwenden?) –

+1

http://stackoverflow.com/questions/11339445/com-google-android-gsf-package -ouldnt-be-found –

+0

Zu meiner Antwort hinzugefügt. – Ralgha

0

Plz Folgen Sie den folgenden Schritten

. Fügen Sie "gcm.jar" in Libs in Ihrer Anwendung

. Android SDK-Manager => Extras => Google Cloud Messaging für Android-Bibliothek installieren (obsolet)

. Android SDK-Manager => Android 4.3 (API 18) => Installieren Sie Google APIs

+0

wird das wirklich funktionieren? Ich habe 2 Fehler eins in Nexus S und eins in Nexus 4. Sie haben das GCM nicht installiert .. aber ich habe sie nicht, um es zu testen .. sollte ich das im Emulator testen? – aimiliano

+0

@aimiliano "Sie haben das GCM nicht installiert" was meinst du? –

+0

Ich meine, ich habe diesen Fehler verursacht durch: java.lang.UnsupportedOperationException: Gerät hat kein Paket com.google.android.gsf in Nexus S an 4 so wie konnten sie nicht diese haben? – aimiliano

0

in Eclipse

1) gcm.jar

2) buildpath Download -> Bibliotheken - -> configure Pfad bauen> externe jar -> path_to_gcmjar

dies ist der wichtigste Punkt

3) gcm.jar kopieren und in Ordner lib Projekt

einfügen
Verwandte Themen