开发者

Android: How to react to notification touch events?

I'm displaying a no开发者_运维技巧tification via the NotificationManager from a BroadcastReceiver, but if the user touches the notification, nothing happens. If I create notifications from a view, the containing activity is brought to front when touching the notification.

How can I display a specific activity/view or otherwise react to the user touching a notification?


when you receive the broadcast message from the NotificationManager you have to create a new PendingIntent which will be fired when user touch in the proper notification. Now, that PendingIntent must have an inner Intent wich will have an action to perform, like start an activity.

on your "onReceive" method in the BroadcastReceiver call to an auxiliary method, like "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);
    }

if you are executing the newly launched activity and want to cancel the launched notification just do this:

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

cheers


Add this in your Manifest file

android:name=".QuadDealsPushReceiver"

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

Then create new Activity and paste this code..now if you touch notification it will redirect to 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!");
        }
    });
}

}

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜