2012-03-20 2 views
0

c2dm에 대한 등록 ID를 얻기위한 응용 프로그램을 작성했습니다. 하지만 라인 startService (의도)에서 활동 구성 요소 정보를 시작할 수 없다고 Exception을 얻고 있습니다.오류 : - 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

+0

03-20 20 : 01 : 54.703 : E/AndroidRuntime (1881)의 스택 추적 추가 : java.lang.RuntimeException : 활동을 시작할 수 없습니다. ComponentInfo {com.IdTest/com.IdTest.IdTestActivity} : java.lang .SecurityException : 허가없이 coment.android.c2dm.permission.RECEIVE 03-20 20 : 01 : 54.703 권한없이 서비스 의도 {act = com.google.android.c2dm.intent.REGISTER (부가 기능 있음)}를 시작할 수 없습니다. : E/AndroidRuntime (1881) : \t (com.IdTest.IdTestActivity.onCreate (IdTestActivity.java:32)) – user1196969

답변

0

당신은 당신의 매니페스트에이 같은 C2DM 서버에서 메시지를 reveive 수있는 권한 추가해야합니다 :

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

난 당신이해야한다고 생각을 이것에 의해 귀하의 서비스에 등록 의도 필터를 추가하면 등록 아이디를 얻을 수 있습니다

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

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

방문 예약 당신이 당신에게 도움이 될 수

  intent.getStringExtra("registration_id"); 

희망을 사용 ian 섹션 ID는

관련 문제