如果在后台Android Xamarin中,获取通知消息以在前台显示我的应用程序

时间:2016-08-04 15:11:02

标签: c# android xamarin

我提前道歉,因为我不是一个特别有经验的Android开发人员,我正在使用C#在Xamarin上开发一个Android项目。我希望这个问题不是重复,因为我似乎找不到一个,但如果是,请将其标记为这样,我很乐意删除这个问题。

我希望我的droid应用程序的图标在启动时及其运行时显示在通知栏中。当应用程序进入销毁事件时,我希望删除图标和消息。到目前为止,我似乎已经失败了,但我似乎无法找到或弄清楚如何点击通知消息将我正在运行的应用程序带到前台(仅当它还没有)。我想我的代码对此采取了错误的总体方向,也许这涉及即将到来的意图或类似的东西?这是我的代码。也许我很接近或者说我的方向不对,但任何人都可以给予的任何帮助或指示都会非常感激。

[Activity(Label = "MyActivity", MainLauncher = true, Theme = "@android:style/Theme.NoTitleBar")]
public class MainActivity : Activity
{
    Notification notification = null;
    NotificationManager notificationManager = null;
    const int notificationId = 0;
    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
        Notification.Builder builder = new Notification.Builder(this)
                                           .SetContentTitle("My App is Running")
                                           .SetContentText("Show in forground")
                                           .SetSmallIcon(Resource.Drawable.Icon);

        // Build the notification:
        notification = builder.Build();

        // Get the notification manager:
        notificationManager = GetSystemService(Context.NotificationService) as NotificationManager;

        // Publish the notification:
        notificationManager.Notify(notificationId, notification);
    }

    protected override void OnDestroy()
    {
        Log.Debug(logTag, "Location app is becoming inactive");
        notificationManager.Cancel(notificationId);
        base.OnDestroy();
    }
 }

1 个答案:

答案 0 :(得分:3)

  

我似乎无法找到或弄清楚如何点击它   通知消息将我正在运行的应用程序置于前台(仅限于此   还没有)

您需要在通知中说明点击后需要执行的操作(启动哪个活动)。

var intent = new Intent(context, typeof(MainActivity)); 
//activity will not be launched if it is already running at the top of the history stack.
intent.AddFlags(ActivityFlags.SingleTop);   

//Flag indicating that this PendingIntent can be used only once.
var pendingIntent = PendingIntent.GetActivity(context, 0
                                             , intent, PendingIntentFlags.OneShot);
Notification.Builder builder = new Notification.Builder(this)
                                           .SetContentTitle("My App is Running")
                                           .SetContentText("Show in forground")
                                           .SetSmallIcon(Resource.Drawable.Icon)
                                           .SetContentIntent(pendingIntent);

详细了解Notification.Builder,了解上述代码的每个项目的含义以及您拥有的其他选项。