Я просто делаю свои первые шаги в программировании для Android, и я хочу попытаться реализовать уведомление parse.com push. Я использую версию 1.8.0. Когда я тестировал, у меня были следующие ошибки:Ошибка ~ parse.com push-уведомление android?
1) Ошибка: (20, 68) error: не удается получить доступ к файлу класса задач для болтов. Задача не найдена.
2) setDefaultPushCallback устарел.
Здесь внизу вы можете увидеть код, который я использовал. Что я пропустил и что мне нужно изменить ?! Может, у кого-нибудь есть хороший пример?
ParseReceiver.java
public class ParseReceiver extends BroadcastReceiver {
private final String TAG = "Parse Notification";
private String msg = "";
@Override
public void onReceive(Context ctx, Intent intent) {
Log.i(TAG, "PUSH RECEIVED!!!");
try {
String action = intent.getAction();
String channel = intent.getExtras().getString("com.parse.Channel");
JSONObject json = new JSONObject(intent.getExtras().getString("com.parse.Data"));
Log.d(TAG, "got action " + action + " on channel " + channel + " with:");
Iterator itr = json.keys();
while (itr.hasNext()) {
String key = (String) itr.next();
Log.d(TAG, "..." + key + " => " + json.getString(key));
if(key.equals("string")){
msg = json.getString(key);
}
}
} catch (JSONException e) {
Log.d(TAG, "JSONException: " + e.getMessage());
}
Bitmap icon = BitmapFactory.decodeResource(ctx.getResources(),
R.drawable.happy);
Intent launchActivity = new Intent(ctx, MainActivity.class);
PendingIntent pi = PendingIntent.getActivity(ctx, 0, launchActivity, 0);
Notification notification = new NotificationCompat.Builder(ctx)
.setContentTitle("PUSH RECEIVED")
.setContentText(msg)
.setSmallIcon(R.drawable.happy)
.setLargeIcon(icon)
.setContentIntent(pi)
.setAutoCancel(true)
.build();
NotificationManager notification_manager = (NotificationManager)ctx.getSystemService(Context.NOTIFICATION_SERVICE);
notification_manager.notify(0, notification);
}
}
ParseApplication.java
public class ParseApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
Parse.initialize(this, Keys.applicationId, Keys.clientKey);
PushService.setDefaultPushCallback(this, MainActivity.class);
ParseInstallation.getCurrentInstallation().saveInBackground();
}
}
Keys.java
public class Keys {
protected static final String applicationId = "";
protected static final String clientKey = "";
}
В Manifect файла я использовал следующий код
<!-- Permissions required for parse.com notifications -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<!-- END Parse permissions -->
<!-- My custom receiver -->
<receiver android:name=".ParseReceiver" >
<intent-filter>
<action android:name="com.makemyandroidapp.parsenotificationexample.RECEIVE_PUSH" />
</intent-filter>
</receiver>
<!-- END my custom receiver -->
<!-- Required for Parse.com notifications -->
<service android:name="com.parse.PushService" />
<receiver android:name="com.parse.ParseBroadcastReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.USER_PRESENT" />
</intent-filter>
</receiver>
<!-- END Parse.com requirements -->
@LuckyLuky Hello! Конечно, в документах я заметил, что они советуют заменить setDefaultPushCallback на ParsePushBroadcastReceiver. В одной теме здесь я нашел некоторые сведения, но не понимаю, как это исправить. Можете проверить это http://stackoverflow.com/questions/26154855/exception-when-opening-parse-push-notification/26180181#26180181. Это значит, что мне нужно использовать их Receiver.java вместо ParseReceiver.java ?! На самом деле теперь для меня большая путаница, потому что я не понимаю, что делать с PasreApplication.java и в каком месте теперь кладут ключи. Вы можете объяснить мне PLS. –
Ваш собственный класс приемника просто замечательный. Просто измените объявление своего класса на этот 'открытый класс ParseReceiver расширяет ParsePushBroadcastReceiver' и заменяет onReceive() декларацию на это' public void onPushOpen (Context ctx, намерение намерения) '(хотя onReceive() работает отлично, как есть). Что касается ParseApplication.java, вы получили ключ приложения и ключ клиента от разбора? Если да, примените их на Keys.java, и вы в порядке. [Здесь] (http://pastebin.com/QwXRbi0D) Я цитирую весь AndroidManifest.xml для вашего удобства, чтобы проверить отличия от вашего кода. –
Я сделал, как вы сказали. Я использовал публичный класс ParseReceiver расширяет ParsePushBroadcastReceiver вместо моего старого, а затем заменил OnReceive на метод onPush и добавил к открытию MainActivity после Push open. Я заметил дублирование .ParseReceiver в Manifect в вашем распоряжении. Это нормально? И последнее, что я хочу спросить, это строка в ParseApplication.java. У меня проблемы с ними. ParseInstallation.getCurrentInstallation(). SaveInBackground(); Что мне нужно сделать?! Ошибка такая же, как и раньше: невозможно получить доступ к файлу класса задач для болтов. Задача не найдена. –