Unity安卓本地推送

https://blog.csdn.net/macaopark/article/details/69053691

新建推送脚本:LocalReceive

import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.TaskStackBuilder;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;

import com.unity3d.player.UnityPlayer;


public class LocalReceiver extends BroadcastReceiver
{

//    private static Set<String> channels = new HashSet();
    private NotificationManager manager;


    @Override
    public void onReceive(Context context, Intent intent) {
//        Toast.makeText(context, "开始工作了!!!", Toast.LENGTH_LONG).show();
        //顶部通知
        manager=(NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
        //点击通知栏跳转
        Intent playIntent = new Intent(context, UnityPlayerActivity.class);
        //PendingIntent,和Intent类似,不同的是由于不是马上调用
        PendingIntent pendingIntent = PendingIntent.getActivity(context, 1, playIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        Notification.Builder builder = new Notification.Builder(context);
        Resources res = context.getResources();
        builder.setContentTitle("title").setContentText("提醒内容").setSmallIcon(R.drawable.ic_launcher).setDefaults(Notification.DEFAULT_ALL).setContentIntent(pendingIntent).setAutoCancel(true).setSubText("早点休息!");
        int app_icon = res.getIdentifier("app_icon", "drawable", context.getPackageName());
        builder.setSmallIcon(app_icon);

        final Notification notify = builder.build();

        manager.notify(1, builder.build());
    }

    public static void ClearShowingNotifications() {
        Activity currentActivity = UnityPlayer.currentActivity;
        @SuppressLint("WrongConstant") NotificationManager nm = (NotificationManager)currentActivity.getSystemService("notification");
        nm.cancelAll();
    }

}

 UnityPlayerActivity中调用:

 //先清空 本地推送内容
    public  void ClearShowing()
    {
        LocalReceiver.ClearShowingNotifications();
    }

    //android 推送功能
    public  void AndroidNotification()
    {
        //LocalReceiver.SetRepeatingNotification(id,delayMs,title,message,ticker,rep,sound,soundName,vibrate,lights,largeIconResource,smallIconResource,bgColor,bundle,channel,actions);
        setReminder(true);
    }

    public void setReminder(boolean reminder)
    {
        AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
        PendingIntent pi = PendingIntent.getBroadcast(UnityPlayerActivity.this, 0, new Intent(this, LocalReceiver.class), 0);
        if (reminder) {
            //设置闹钟
            Calendar instance = Calendar.getInstance();
            instance.setTimeInMillis(System.currentTimeMillis());
            instance.setTimeZone(TimeZone.getTimeZone("GET+8"));
            instance.add(Calendar.SECOND, 5);//设置5秒
            am.setRepeating(AlarmManager.RTC_WAKEUP, instance.getTimeInMillis(), 60000, pi);
//          am.set(AlarmManager.RTC_WAKEUP, instance.getTimeInMillis(),pi);
        }else {
            am.cancel(pi);//关闭闹钟

        }
    }

  回到Unity中:

  void Awake ()
  {
          ClearNotifications();//android  清空推送
  }
  void Start ()
  {
          androidNotification();//android 推送
  }
//android  推送
    public void androidNotification()
    {
        //LocalNotification.SendRepeatingNotification(1, 5000, 5000, "一起捕鱼吧", "炮声一响,黄金万两", new Color32(0xff, 0x44, 0x44, 255));
        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
        jo.Call("AndroidNotification");
        Debug.Log("android   通知功能=======");
    }

    //android  清空推送
    public void ClearNotifications()
    {
        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
        jo.Call("ClearShowing");
        Debug.Log("android   清空通知功能======="); 
    }

  

  

posted @ 2018-09-08 16:38  不够自律的人  阅读(805)  评论(0编辑  收藏  举报