2014-12-30 5 views
1

Я просто делаю свои первые шаги в программировании для 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 --> 

ответ

0

1) Вы должны проверить папку ЛИЭСА вашего проекта Eclipse предоставляет. Возможно, вам не хватает последнего файла jar. Это неотъемлемая часть zip, которая содержит файлы parse lib.

2) К сожалению, официальные руководства несколько вводят в заблуждение, поскольку они не полностью обновлены с последними изменениями API. На самом деле это было необходимо до версии 1.6, если я не ошибаюсь.
Теперь, как вы видите в своем коде получателя, вы устанавливаете активность, которая будет открываться при нажатии уведомления, задав ожидающее намерения. Проверьте это примечание deprecation.
Текущая реализация, использующая новый ParsePushBroadcastReceiver, является более гибкой, чем когда-либо! Поэтому вместо расширения BroadcastReceiver расширьте это. Обязательно прочтите документацию об этом. Это очень полезно.

также:
а) В манифесте заменить часть "Мой настраиваемого приемника" со следующим

<receiver android:name=".ParseReceiver" android:exported="false"> 
    <intent-filter> 
     <action android:name="com.parse.push.intent.RECEIVE" /> 
     <action android:name="com.parse.push.intent.OPEN" /> 
     <action android:name="com.parse.push.intent.DELETE" /> 
    </intent-filter> 
</receiver> 


б) Изменить этот

<receiver android:name="com.parse.ParseBroadcastReceiver" > 

к вашему собственному приемнику

<receiver android:name="com.makemyandroidapp.parsenotificationexample.ParseReceiver"> 



с) в манифесте убедитесь использовать класс ParseApplication вы создали в качестве атрибута имени:

<application 
    android:name=".ParseApplication" 
    .... 
    .... 
/> 



Я надеюсь, что выше поможет продолжите свой проект.

+0

@LuckyLuky Hello! Конечно, в документах я заметил, что они советуют заменить setDefaultPushCallback на ParsePushBroadcastReceiver. В одной теме здесь я нашел некоторые сведения, но не понимаю, как это исправить. Можете проверить это http://stackoverflow.com/questions/26154855/exception-when-opening-parse-push-notification/26180181#26180181. Это значит, что мне нужно использовать их Receiver.java вместо ParseReceiver.java ?! На самом деле теперь для меня большая путаница, потому что я не понимаю, что делать с PasreApplication.java и в каком месте теперь кладут ключи. Вы можете объяснить мне PLS. –

+0

Ваш собственный класс приемника просто замечательный. Просто измените объявление своего класса на этот 'открытый класс ParseReceiver расширяет ParsePushBroadcastReceiver' и заменяет onReceive() декларацию на это' public void onPushOpen (Context ctx, намерение намерения) '(хотя onReceive() работает отлично, как есть). Что касается ParseApplication.java, вы получили ключ приложения и ключ клиента от разбора? Если да, примените их на Keys.java, и вы в порядке. [Здесь] (http://pastebin.com/QwXRbi0D) Я цитирую весь AndroidManifest.xml для вашего удобства, чтобы проверить отличия от вашего кода. –

+0

Я сделал, как вы сказали. Я использовал публичный класс ParseReceiver расширяет ParsePushBroadcastReceiver вместо моего старого, а затем заменил OnReceive на метод onPush и добавил к открытию MainActivity после Push open. Я заметил дублирование .ParseReceiver в Manifect в вашем распоряжении. Это нормально? И последнее, что я хочу спросить, это строка в ParseApplication.java. У меня проблемы с ними. ParseInstallation.getCurrentInstallation(). SaveInBackground(); Что мне нужно сделать?! Ошибка такая же, как и раньше: невозможно получить доступ к файлу класса задач для болтов. Задача не найдена. –

Смежные вопросы