GCM을 통해 알림을 보내려고합니다. 테스트 프로젝트에서 제대로 작동합니다. 그러나 세부적인 디자인에서 나는 거의 변하지 않았다. 저는 액티비티를 조각으로 사용하지 않습니다. 그리고 내가 등록 번호를 얻으려고 할 때GCMRegistrar.getRegistrationId에서 빈 ID를 가져옵니다.
regId = GCMRegistrar.getRegistrationId(getActivity());
빈 REGId를 얻으십시오. 도움말은 문제가 무엇인지 양해 바랍니다
내 조각 :
package com.managment.pavel.managmentgradle.fragments;
....
import static com.managment.pavel.managmentgradle.Services.CommonUtilities.DISPLAY_MESSAGE_ACTION;
import static com.managment.pavel.managmentgradle.Services.CommonUtilities.EXTRA_MESSAGE;
import static com.managment.pavel.managmentgradle.Services.CommonUtilities.SENDER_ID;
import static com.managment.pavel.managmentgradle.Services.CommonUtilities.SERVER_URL;
import static com.managment.pavel.managmentgradle.Services.CommonUtilities.TAG;
import com.google.android.gcm.GCMRegistrar;
import com.managment.pavel.managmentgradle.R;
import com.managment.pavel.managmentgradle.Services.ServerUtilities;
public class NotifyFragment extends Fragment implements View.OnClickListener {
private final BroadcastReceiver mHandleMessageReceiver =
new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String newMessage = intent.getExtras().getString(EXTRA_MESSAGE);
mDisplay.setText(newMessage + "\n");
}
};
private TextView mDisplay;
private AsyncTask<Void, Void, Void> mRegisterTask;
private String regId;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.notify_fragment, null);
...
GCMRegistrar.checkDevice(getActivity());
GCMRegistrar.checkManifest(getActivity());
getActivity().registerReceiver(mHandleMessageReceiver, new IntentFilter(DISPLAY_MESSAGE_ACTION));
mDisplay = (TextView) v.findViewById(R.id.notyfi_status);
return v;
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.regGCM:
regId = GCMRegistrar.getRegistrationId(getActivity());
Log.d(TAG,"regId"+regId);
if (regId.equals("")) {
GCMRegistrar.register(getActivity(), SENDER_ID);
} else {...}
break;
case R.id.unregGCM:
GCMRegistrar.unregister(getActivity());
break;
}
}
}
내 매니페스트 :
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.managment.pavel.managmentgradle" >
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<permission
android:name="com.managment.pavel.managmentgradle.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission
android:name="com.managment.pavel.managmentgradle.permission.C2D_MESSAGE" />
<!-- This app has permission to register and receive data message. -->
<uses-permission
android:name="com.google.android.c2dm.permission.RECEIVE" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.managment.pavel.managmentgradle.MyActivity"
android:label="@string/app_name"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize" android:theme="@style/Theme.AppCompat">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<!--<service android:name=".Services.GuestIn" android:process=":GuestIn"/>-->
</activity>
<receiver
android:name="com.google.android.gcm.GCMBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<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.managment.pavel.managmentgradle" />
</intent-filter>
</receiver>
<service android:name=".Services.GCMIntentService" />
</application>
</manifest>
Untilites :
public final class CommonUtilities {
public static final String SERVER_URL = "http://...........";
public static final String SENDER_ID = "....................";
public static final String TAG = "GCMDemo";
public static final String DISPLAY_MESSAGE_ACTION ="DISPLAY_MESSAGE";
public static final String EXTRA_MESSAGE = "message";
static void displayMessage(Context context, String message) {
Intent intent = new Intent(DISPLAY_MESSAGE_ACTION);
intent.putExtra(EXTRA_MESSAGE, message);
context.sendBroadcast(intent);
}
}
링크를 이용해 주셔서 감사 드리겠습니다. 그러나 지금은 돌연변이에 대한 시간이 없습니다. 내 코드에서 바꿀 것을 제안 할 수도 있습니다. –
그리고 나는 GCMRegistrar.register 후에 GCMRegistrar.getRegistrationId를 발생시키지 않습니다. 줄곧 –