15

I added a button inside a notification

but I don't know how to have it call a function when it's clicked.

I tried an approach like this https://code.google.com/p/languagepickerwidget/source/browse/trunk/trunk/src/org/gnvo/langpicker/LangPicker.java since it's also using a RemoteViews object but nothing happens when I click the button.

This is what I currently have:

private void createNotification(){
    String ns = Context.NOTIFICATION_SERVICE;
    NotificationManager notificationManager = (NotificationManager) getSystemService(ns);

    Notification notification = new Notification(R.drawable.ic_launcher, null, System.currentTimeMillis());
    RemoteViews notificationView = new RemoteViews(getPackageName(), R.layout.notification_switch);

    //the intent that is started when the notification is clicked (works)
    Intent notificationIntent = new Intent(this, SettingsActivity.class);
    PendingIntent pendingNotificationIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);

    notification.contentView = notificationView;
    notification.contentIntent = pendingNotificationIntent;
    notification.flags |= Notification.FLAG_NO_CLEAR;

    //this is the intent that is supposed to be called when the button is clicked
    Intent switchIntent = new Intent(this, switchButtonListener.class);
    PendingIntent pendingSwitchIntent = PendingIntent.getBroadcast(this, 0, switchIntent, 0);

    notificationView.setOnClickPendingIntent(R.id.buttonswitch, pendingSwitchIntent);

    notificationManager.notify(1, notification);
}

public static class switchButtonListener extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d("TAG", "test");
    }

}

I can start an activity with the button but I didn't succeed to have it call a simple function. What would be the best way to do this?

Edit: I found out that I had to register "switchButtonListener" in AndroidManifest.xml

<receiver android:name="SettingsActivity$switchButtonListener" />

Source: Android Activity with no GUI

It works now.

4

2 に答える 2

32

AndroidManifest.xmlに「switchButtonListener」を登録する必要があることがわかりました

<receiver android:name="SettingsActivity$switchButtonListener" />

出典:GUIなしのAndroidアクティビティ


後で、このようなコードを使用して、マニフェストを変更せずに同じことを実現できることを知りました。

switchButtonListener = new SwitchButtonListener();
registerReceiver(switchButtonListener, new IntentFilter(SWITCH_EVENT));

public class switchButtonListener extends BroadcastReceiver {
@Override
    public void onReceive(Context context, Intent intent) {
        Log.d("TAG", "test");
    }

}

Intent switchIntent = new Intent(LangService.SWITCH_EVENT);
PendingIntent pendingSwitchIntent = PendingIntent.getBroadcast(context, 0, switchIntent, 0);

notificationView.setOnClickPendingIntent(R.id.buttonswitch, pendingSwitchIntent);


このようにして、静的属性なしでswitchButtonListenerクラスを宣言できることに注意してください(静的でない場合は、前の例でクラッシュします)。これにより、柔軟性が大幅に向上します。
後でunregisterReceiver()を呼び出すことを忘れないでください。

于 2012-09-16T21:51:00.830 に答える