Android:如何响应通知触摸事件?

4

我通过NotificationManager从一个BroadcastReceiver显示通知,但如果用户触摸通知,什么都不会发生。如果我从视图创建通知,则在触摸通知时将前置包含活动。

我如何显示特定的活动/视图或以其他方式响应用户触摸通知?


使用adb logcat、DDMS或Eclipse中的DDMS透视图来查看LogCat,并查看在您点击“通知”时显示的消息。 - CommonsWare
2个回答

4

当您从NotificationManager接收广播消息时,您必须创建一个新的PendingIntent,当用户点击适当的通知时将会触发它。现在,该PendingIntent必须有一个内部意图,其中将执行一个操作,例如启动活动。

在BroadcastReceiver的"onReceive"方法中调用一个辅助方法,比如"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);

干杯


-3
将以下代码添加到您的清单文件中:

android:name=".QuadDealsPushReceiver"

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

然后创建新的Activity并粘贴此代码..现在,如果您触摸通知,它将重定向到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!");
        }
    });
}

}


3
我相信您将此回答粘贴到了错误的问题中,因为它与提问者询问的通知或其他事项无关。 - CommonsWare

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接