2012-03-20 79 views
0

我已经编写了注册ID为c2dm的应用程序。但我得到异常,因为无法在startService(intent)行启动活动组件信息;错误: - 获取c2dm的注册ID时出现错误

我的主类是

public class IdTestActivity extends Activity { 
    static TextView mytext = null; 
    Context context = null; 
    Intent intent = null; 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     Intent intent = new Intent("com.google.android.c2dm.intent.REGISTER"); 
     intent.putExtra("app",PendingIntent.getBroadcast(this, 0, new Intent(), 0)); 
     intent.putExtra("sender", "[email protected]"); 
     startService(intent); 


    } 
} 

我的收款人类是

public class c2dmReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     String action = intent.getAction(); 
     Log.w("C2DM", "Registration Receiver called"); 
     if ("com.google.android.c2dm.intent.REGISTRATION".equals(action)) { 
      Log.w("C2DM", "Received registration ID"); 
      final String registrationId = intent 
        .getStringExtra("sender"); 
      String error = intent.getStringExtra("error"); 

      Log.d("C2DM", "dmControl: registrationId = " + registrationId 
        + ", error = " + error); 
      // TODO Send this to my application server 
     } 
    } 

} 

和我的清单文件是

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.IdTest" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk android:minSdkVersion="8" /> 

    <application> 
     <permission 
      android:name="com.IdTest.permission.C2D_MESSAGE" 
      android:protectionLevel="signature" /> 

     <uses-permission android:name="com.IdTest.permission.C2D_MESSAGE" /> 

     <activity 
      android:name=".IdTestActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <receiver 
      android:name=".c2dmReceiver" 
      android:permission="com.google.android.c2dm.permission.SEND" > 
      <intent-filter > 
       <action android:name="com.google.android.c2dm.intent.RECEIVE" > 
       </action> 

       <category android:name="com.IdTest" /> 
      </intent-filter> 
     </receiver> 
    </application> 

</manifest> 
+0

什么错误,你得到了什么?添加异常的堆栈跟踪 – Houcine 2012-03-20 14:51:18

+0

03-20 20:01:54.703:E/AndroidRuntime(1881):java.lang.RuntimeException:无法启动活动ComponentInfo {com.IdTest/com.IdTest.IdTestActivity}:java.lang .SecurityException:不允许启动服务Intent {act = com.google.android.c2dm.intent.REGISTER(has extras)}未经许可com.google.android.c2dm.permission.RECEIVE 03-20 20:01:54.703 :E/AndroidRuntime(1881):\t at com.IdTest.IdTestActivity.onCreate(IdTestActivity.java:32) – user1196969 2012-03-20 14:53:49

回答

0

您应该添加到reveive您清单从C2DM服务器这样的消息的权限:

<!-- This app has permission to register and receive message --> 
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
0

我想你应该添加注册意向过滤器到您的服务,由此你可以得到注册ID

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

      <category android:name="your pacakge" /> 
     </intent-filter> 

你也可以得到即将到来的regi共探ID使用

  intent.getStringExtra("registration_id"); 

,希望能帮助你