2013-11-01 51 views
6

我想获取设备的注册ID(使用模拟器进行测试)使用GCM设置推送通知。无法启动服务Intent {act = com.google.android.c2dm.intent.REGISTRATION(has extras)} U = 0:not found

我曾尝试下面的代码,这使我有以下错误:

Unable to start service Intent { act=com.google.android.c2dm.intent.REGISTRATION (has extras) } U=0: not found 

清单文件

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.me.pushnotifications" 
    android:versionCode="1" 
    android:versionName="1.0" > 
    <uses-permission android:name="android.permission.INTERNET"/> 
    <uses-permission android:name="android.permission.GET_ACCOUNTS"/> 
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/> 

    <permission android:name="com.me.pushnotifications.permission.C2D_MESSAGE" android:protectionLevel="signature" /> 
    <uses-permission android:name="com.me.pushnotifications.permission.C2D_MESSAGE" /> 


    <uses-sdk 
     android:minSdkVersion="10" 
     android:targetSdkVersion="18" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 

     <receiver android:name="com.me.pushnotifications.MyBroadcastReceiver" 
     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.me.pushnotifications"/> 
     </intent-filter> 

     </receiver> 


     <activity 
      android:name="com.me.pushnotifications.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> 
    </application> 

</manifest> 

我使用一个BroadcastReceiver来达到目的:

package com.me.pushnotifications; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.util.Log; 

public class MyBroadcastReceiver extends BroadcastReceiver{ 

    @Override 
    public void onReceive(Context arg0, Intent intent) { 
     // TODO Auto-generated method stub 
     String action = intent.getAction(); 
     Log.i("action::",action); 
     try{ 
      if(action.equals("com.google.android.c2dm.intent.REGISTRATION")){ 
       String regId = intent.getStringExtra("registration_id"); 
       String error = intent.getStringExtra("error"); 
       String unregistered = intent.getStringExtra("unregistered"); 
       Log.i("regId::",regId); 
      } 
      else if(action.equals("com.google.android.c2dm.intent.RECEIVE")){ 
       String data = intent.getStringExtra("data"); 
       Log.i("data::",data); 
      } 
     } 
     finally{ 

     } 
    } 

} 

MainActivity

package com.me.pushnotifications; 

import android.app.Activity; 
import android.app.PendingIntent; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     final Context context = getApplicationContext(); 

     final String appId = getResources().getString(R.string.appId) ; 
     Log.i("appName::",appId); 
     Button activateButton,deactivateButton; 
     activateButton = (Button)findViewById(R.id.activateButton); 
     deactivateButton = (Button)findViewById(R.id.deactivateButton); 

     activateButton.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       Log.i("activate::","clicked"); 
       Intent regIntent = new Intent("com.google.android.c2dm.intent.REGISTRATION"); 
       Log.i("intent::","created"); 
       regIntent.putExtra("app", PendingIntent.getBroadcast(context, 0, 
         new Intent(), 0)); 
regIntent.putExtra("sender", "registration_id"); 
       startService(regIntent); 
      } 
     }); 

     deactivateButton.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       Log.i("deactivate::","clicked"); 
       Intent unregIntent = new Intent("com.google.android.c2dm.intent.UNREGISTER"); 
       Log.i("intent::","created"); 
       unregIntent.putExtra("app", PendingIntent.getBroadcast(context, 0, 
         new Intent(), 0)); 
       startService(unregIntent); 
      } 
     }); 
    } 


    @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; 
    } 

} 

我已经安装了Google API for API Level 18。可能是什么原因导致了该问题?

+0

你去哪儿在声明.GCMIntentService清单文件? –

+0

正在使用BroadcastReceiver而不是GCMIntentService –

+0

选中此项:http://www.androidhive.info/2012/10/android-push-notifications-using-google-cloud-messaging-gcm-php-and-mysql/ –

回答

0

在清单 文件中加入这一行你的意图过滤器标签

<action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 

像这样

<intent-filter> 

       <!-- Receives the actual messages. --> 
       <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
       <!-- Receives the registration id. --> 
       <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 

       <category android:name="com.androidhive.pushnotifications" /> 
      </intent-filter> 
+0

该行已经在清单文件中 –

+0

@ user2739737是否从ectras文件夹中导入了gcm.jar adt.if然后首先去安装google play服务goto android SDk manager-> extras-> Google Play Services 然后把gcm.jar文件到你的lib文件夹(/ Users/SS/Desktop/Android/adt-bundle-mac-x86_64-20130717/sdk/extras/google/gcm/gcm-client/dist)gcm.jar path clean your project然后运行 – morroko

+0

http://stackoverflow.com/questions/19678787/cant-import-import-com-google-android-gcm-gcmbaseintentservice/19678841#19678841检查这也 – morroko

0

使用这样的:

<receiver 
    android:name="com.example.gcmclient.GcmBroadcastReceiver" 
    android:permission="com.google.android.c2dm.permission.SEND" > 
    <intent-filter> 
     <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
     <!-- Receives the registration id. --> 
     <action android:name="com.google.android.c2dm.intent.REGISTER" /> 

     <category android:name="com.example.gcmclient" /> 
    </intent-filter> 
</receiver> 
<service android:name="com.example.gcmclient.GcmMessageHandler" /> 

<meta-data android:name="com.google.android.gms.version" 
    android:value="@integer/google_play_services_version" /> 

<service android:name=".GcmIntentService" /> 
相关问题