Android: как реагировать на уведомления о событиях касания? - PullRequest
3 голосов
/ 18 марта 2011

Я отображаю уведомление через NotificationManager от BroadcastReceiver, но если пользователь касается уведомления, ничего не происходит.Если я создаю уведомления из представления, содержащее действие выводится на передний план при касании уведомления.

Как я могу отобразить конкретное действие / представление или иным образом реагировать на то, что пользователь касается уведомления?

Ответы [ 2 ]

3 голосов
/ 18 марта 2011

когда вы получаете широковещательное сообщение от NotificationManager, вы должны создать новый PendingIntent, который будет запущен, когда пользователь коснется соответствующего уведомления. Теперь PendingIntent должен иметь внутреннее намерение, которое будет выполнять какое-либо действие, например, запускать действие.

в вашем методе "onReceive" при вызове BroadcastReceiver вспомогательного метода, такого как "showProximityAlertNotification"

@Override
        public void onReceive(Context context, Intent intent) {
showProximityAlertNotification();
}


//now when the user touch the notification on the notification bar, an activity named //"ItemListActivity" will be launched. You can put an IntentFilter, a Category, an Action 
//to perform any different operations within your activity
private void showProximityAlertNotification(  ){

        String titulo = getString(R.string.notification_proximity_alerts_fired_title);
        String tickerText = getString(R.string.notification_proximity_alerts_fired_ticker);
        String contextText = getString(R.string.notification_proximity_alerts_fired_content);
        int icon = R.drawable.wk_logo;
        long when = System.currentTimeMillis();

        Notification notification = new Notification(icon, tickerText, when);

        //define the actions to perform when user touch the notification
        Intent launchApp = new Intent(getApplicationContext(), ItemListActivity.class);
        launchApp.putExtra("com.xxxxxxx.xxxxxxxxx.bean.Item", "anyObjectYouWant");
        launchApp.setAction( "VIEW_DETAILS_PROPERTY" );
        PendingIntent launchNotification = PendingIntent.getActivity(getApplicationContext(), 0, launchApp, 0);
        notification.setLatestEventInfo(getApplicationContext(), titulo, contextText, launchNotification);

        notificationManager.notify(NOTIFICATION_ID_PROXIMITY_ALERT_FIRED, notification);
    }

если вы выполняете только что запущенное действие и хотите отменить запущенное уведомление, просто сделайте следующее:

String notManagerName = Context.NOTIFICATION_SERVICE;
                NotificationManager notificationManager = (NotificationManager) getSystemService(notManagerName);
                notificationManager.cancel(ProximityAlerts.NOTIFICATION_ID_PROXIMITY_ALERT_FIRED);

ура

0 голосов
/ 18 марта 2011

Добавьте это в свой файл манифеста

android:name=".QuadDealsPushReceiver"

 <application android:label="@string/app_name" android:name=".QuadDealsPushReceiver"
  android:theme="@style/MyTheme" android:debuggable="true">

Затем создайте новое действие и вставьте этот код. Теперь, если вы дотронетесь до уведомления, оно будет перенаправлено на Say YourActivityname.class.

 public class QuadDealsPushReceiver extends Application {
public static String apid=null;
public void onCreate(){
    AirMail am = AirMail.getInstance();
    am.acceptPush(this, new PushReceiver() {
        @Override
        public void onReceive(String message, String payload){
            Log.d("push", "Got message '" + message +"' and payload '" + payload + "'");
        }
        @Override
        public void onClick(String message, String payload){
            Intent intent = new Intent("android.intent.action.MAIN");
            intent.setClass(QuadDealsPushReceiver.this, YourActivityname.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            QuadDealsPushReceiver.this.startActivity(intent);
        }
    });

    am.setAPIDReceiver(this, new APIDReceiver() {
        @Override
        public void onReceive(String apids, boolean valid){
            apid=apids;
            if(valid){
                Log.d("push", "Got apid: " + apid);
            } else {
                Log.d("push", "Application registration invalid!"+ apid);
            }
        }

        @Override
        public void onAirMailInstallRefusal() {
            QuadMain.register = false;
            Log.d("push", "AirMail Install Refused!");
        }
    });
}

}

...