5

я получить толчок сообщение, но всякий раз, когда я нажимаю на них внутри notificationbar появляется эта LogCat и пропадает уведомление ...Нет Намерение приемника не установлен городской дирижабль

Это мой выход LogCat:

05-31 16:49:47.165: D/Test - UALib(20523): No intent receiver set, not sending ACTION_NOTIFICATION_OPENED 

Вот моя манифеста структура:

 <category android:name="com.test.push" /> 
    </intent-filter> 
</receiver> 

<service 
    android:name="com.urbanairship.push.PushService" 
    android:label="Push Notification Service" /> 
<service 
    android:name="com.urbanairship.push.PushWorkerService" 
    android:label="Push Notification Worker Service" /> 
<service 
    android:name="com.urbanairship.analytics.EventService" 
    android:label="Event Service" /> 

<provider 
    android:name="com.urbanairship.UrbanAirshipProvider" 
    android:authorities="com.test.push.urbanairship.provider" 
    android:exported="false" 
    android:multiprocess="true" /> 

<activity 
    android:name="com.test.push.MainActivity" 
    android:label="@string/app_name" > 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 

     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 
<activity 
    android:name="com.test.push.SettingsActivity" 
    android:label="@string/title_activity_settings" /> 
<activity 
    android:name="com.test.push.ChooseClass" 
    android:label="@string/app_name" /> 
</application> 

Это вот мой MyApplication.java:

public class MyApplication extends Application { 

@Override 
public void onCreate() { 
AirshipConfigOptions options = AirshipConfigOptions 
     .loadDefaultOptions(this); 
options.developmentAppKey = "1234567890"; 
options.developmentAppSecret = "1234567890"; 
options.productionAppKey = ""; 
options.productionAppSecret = ""; 
options.gcmSender = "1234567890"; 
options.transport = "gcm"; 
options.inProduction = false; 

UAirship.takeOff(this, options); 
PushManager.enablePush(); 
} 
} 

И это мой IntentReceiver.java:

public class IntentReceiver extends BroadcastReceiver { 
@Override 
public void onReceive(Context aContext, Intent aIntent) { 
String action = aIntent.getAction(); 

if (action.equals(PushManager.ACTION_PUSH_RECEIVED)) { 
    logPushExtras(aIntent); 
} else if (action.equals(PushManager.ACTION_NOTIFICATION_OPENED)) { 
    logPushExtras(aIntent); 

    Intent launch = new Intent(Intent.ACTION_MAIN); 
    launch.setClass(UAirship.shared().getApplicationContext(), 
      MainActivity.class); 

    launch.putExtra("push_message", 
      aIntent.getStringExtra(PushManager.EXTRA_ALERT)); 
    launch.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

    UAirship.shared().getApplicationContext().startActivity(launch); 
} else if (action.equals(PushManager.ACTION_REGISTRATION_FINISHED)) { 
    Logger.info("device registrated, APID=" 
      + aIntent.getStringExtra(PushManager.EXTRA_APID) 
      + ", valid=" 
      + aIntent.getBooleanExtra(
        PushManager.EXTRA_REGISTRATION_VALID, false)); 
} 
} 

private void logPushExtras(Intent intent) { 
Set<String> keys = intent.getExtras().keySet(); 
for (String key : keys) { 

    List<String> ignoredKeys = (List<String>) Arrays.asList(
      "collapse_key", "from", PushManager.EXTRA_NOTIFICATION_ID, 
      PushManager.EXTRA_PUSH_ID, PushManager.EXTRA_ALERT); 
    if (ignoredKeys.contains(key)) { 
     continue; 
    } 
} 
} 
} 

ответ

4

Проблема была, я пропускал следующую строку внутри моего MyApplication.java файла :

PushManager.shared().setIntentReceiver(IntentReceiver.class); 

Все остальное было правильно. Теперь он работает отлично.

+1

Где вы храните это заявление в Java файл? На самом деле я сохраняю это утверждение в onCreate(), но не работает. –

+0

Получил это. Я решил это. –

+0

Отличный совет - спасибо! – bkurzius

1

И я пропускал, чтобы указать атрибут приложения android:name в мой манифест файл-

<application 
    android:allowBackup="true" 
    android:icon="@drawable/app_icon" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" 
    android:allowClearUserData="true" 
    android:enabled="true" 
    android:name=".MyMainApplication"> 

    <activity> 
    Some Activity 
    </activity> 

</application>