Android通知操作:挂起意图未能正常工作

3
我遇到了一些关于Android Notification Actions的问题。 这是我的想法: 我的BroadcastReceiver接收广播后唤醒,然后创建通知。 该通知应当:
  • 在点击通知主体时打开MainActivity
  • 在点击"Condividi"按钮时共享一条信息
我成功实现了在点击通知时使用ACTION_SEND,但是对于action就没有成功... 在网络上找不到任何东西,只有打开活动的pendingIntents
这是我的代码:
public class AlarmReceiver extends BroadcastReceiver {
static int notificationId = 0;
@Override
public void onReceive(Context context, Intent intent) {
    Log.d("AlarmReceiver","ricevuto " + intent.getAction());
    Calendar calendar = Calendar.getInstance();
    String tipo = "sconosciuto";
    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context);
    mBuilder.setSmallIcon(R.drawable.ic_flag_black_24dp);
    if(intent.getAction().equals(Constants.ALARM_ACTION_PALINDROM)){
        tipo="palindromo";
    }
    if(intent.getAction().equals(Constants.ALARM_ACTION_DOUBLE)){
        tipo="simmetrico";
    }

    mBuilder.setContentTitle("Orario " + tipo + "!");

    String currentTime = new SimpleDateFormat("HH:mm").format(new Date());
    mBuilder.setContentText(currentTime);

    Intent shareIntent = new Intent();

    Intent notifIntent = new Intent(context,MainActivity.class);
    shareIntent.setAction(Intent.ACTION_SEND);
    shareIntent.setType("text/plain");
    shareIntent.putExtra(Intent.EXTRA_TEXT,"Sono le " + currentTime +", " + tipo + "\u2764");
    Intent shareIntentWithChooser = Intent.createChooser(shareIntent,"Send to");

    TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
    stackBuilder.addParentStack(MainActivity.class);
    stackBuilder.addNextIntent(notifIntent);

    PendingIntent pendingIntent = stackBuilder.getPendingIntent(0,PendingIntent.FLAG_UPDATE_CURRENT);
    PendingIntent pendingIntentShare = PendingIntent.getBroadcast(context,notificationId,shareIntentWithChooser,PendingIntent.FLAG_UPDATE_CURRENT);

    mBuilder.addAction(R.drawable.ic_send_black_18dp,"Condividi",pendingIntentShare);

    mBuilder.setContentIntent(pendingIntent);
    Notification notification = mBuilder.build();
    notification.flags = Notification.DEFAULT_LIGHTS|Notification.FLAG_AUTO_CANCEL;

    NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify(notificationId,notification);
    notificationId++;
}

非常感谢,我真的无法理解它!


1
首先,您应该使用getActivity而不是getBroadcast,因为您想要使用共享操作启动活动。此外,在创建它时无需提供主要活动,因为您希望稍后“选择”它。 - David Medenjak
我理解了您评论的第一部分,并且它解决了我的问题(所以请添加一个答案,这样我就可以将您标记为“问题已解决”:)) 但是第二部分对我来说不太清楚。您的意思是什么,提供创建时的主要活动?它们是两个不同的意图,一个是分享,另一个是活动... - magicleon94
谢谢。我不确定那是否是唯一的问题。不过忘掉第二部分吧,我把一些代码行搞混了! :) - David Medenjak
好的,谢谢你! :D - magicleon94
1个回答

2

您应该使用getActivity()而不是getBroadcast()来创建您的PendingIntent,因为您想要启动一个带有ACTION_SHAREActivity而不是发送广播。


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