传奇私服发布网_新开传奇网站发布_最全优秀单职业传奇私服发布平台_www.sf999.Com
新开传奇私服网站专注于服务广大新开传奇首区和复古传奇私服玩家,我们承诺全年无休,每天为您提供最新的新开传奇网站和传奇sf999信息。...
2025-01-03
当游戏陪玩平台源码在后台运行时,如果用户关闭了手机屏幕(手机进入灭屏休眠状态),这个时候有消息进来怎么办?这就需要在游戏陪玩平台源码开发时实现手机锁屏状态下消息提醒功能。
解决思路:
1、游戏陪玩平台源码退到后台,我们想继续做些什么,当然是使用服务了。
2、在活动里定义一个广播接收器(),用于接收服务的命令。
3、在活动里添加标志位(必须添加),允许游戏陪玩平台源码锁屏状态下显示消息(解锁屏幕)。
4、服务在需要给用户进行消息提醒时,向广播接收器发送命令,然后由广播接收器来执行即可。
具体步骤:
一、在.class活动的()方法里添加标志位,代码如下:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/**
* 添加标志位,允许锁屏状态下显示消息,四个标志位分别是:
* 1.锁屏状态下显示
* 2.解锁
* 3.保持屏幕长亮(可选)
* 4.打开屏幕
* 当Activity启动的时候,它会解锁并亮屏显示
*/
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED //锁屏状态下显示
| WindowManager.LayoutParams.FLAG_DI *** ISS_KEYGUARD //解锁
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON //保持屏幕长亮
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); //打开屏幕
}
二、在.class活动里定义一个内部类广播接收器,代码如下:
/**
* 定义广播接收器,用于执行Service服务的需求(内部类)
*/
private class ServiceNeedBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
/*------------这里是要在Activity活动里执行的代码----------*/
//手机震动
ToolUtils.playVibrate(MainActivity.this, true);
//播放系统默认闹钟 ***
ToolUtils.defaultAlarmMediaPlayer(MainActivity.this);
/*------------这里是要在Activity活动里执行的代码----------*/
}
}
这里提供一下.java工具类里的震动和闹铃代码:
package com.xiao7.pump.Utils;
import android.annotation.SuppressLint;
import android.app.KeyguardManager;
import android.app.Service;
import android.content.Context;
import android.media.AudioAttributes;
import android.media.Ringtone;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Build;
import android.os.PowerManager;
import android.os.Vibrator;
public class ToolUtils {
private static Vibrator vibrator;
private static PowerManager.WakeLock wakeLock;
/**
* 唤醒手机屏幕并解锁
*
* @param context
*/
@SuppressLint("InvalidWakeLockTag")
public static void acquire(Context context) {
try {
//获取电源管理器对象
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
//获取PowerManager.WakeLock对象
wakeLock = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_DIM_WAKE_LOCK, "bright");
//点亮屏幕30秒
wakeLock.acquire(30 * 1000);
//灭屏(释放锁)
if (null != wakeLock) {
wakeLock.release();
}
KeyguardManager km = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
//这里参数”unLock”作为调试时LogCat中的Tag
KeyguardManager.KeyguardLock kl = km.newKeyguardLock("unLock");
//解锁
kl.disableKeyguard();
} catch (Exception ex) {
}
}
/**
* 手机震动
*
* @param context
* @param isRepeat 是否重复震动
*/
public static void playVibrate(Context context, boolean isRepeat) {
/*
* 设置震动,用一个long的数组来表示震动状态(以毫秒为单位)
* 如果要设置先震动1秒,然后停止0.5秒,再震动2秒则可设置数组为:long[]{1000, 500, 2000}。
* 别忘了在AndroidManifest配置文件中申请震动的权限
*/
try {
vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
long[] patern = new long[]{1000, 500, 2000};
AudioAttributes audioAttributes = null;
/**
* 适配android7.0以上版本的震动
* 说明:如果发现5.0或6.0版本在app退到后台之后也无法震动,那么只需要改下方的Build.VERSION_CODES.N版本号即可
*/
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
audioAttributes = new AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.setUsage(AudioAttributes.USAGE_ALARM) //key
.build();
vibrator.vibrate(patern, isRepeat ? 1 : -1, audioAttributes);
}else {
vibrator.vibrate(patern, isRepeat ? 1 : -1);
}
} catch (Exception ex) {
}
}
/**
* 关闭震动
*/
public static void closeVibrate() {
if (vibrator != null) {
vibrator.cancel();
vibrator = null;
}
}
/**
* 播放系统默认提示音
*
* @return MediaPlayer对象
* @throws Exception
*/
public static void defaultMediaPlayer(Context mContext) {
try {
Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
Ringtone r = RingtoneManager.getRingtone(mContext, notification);
r.play();
} catch (Exception ex) {
}
}
/**
* 播放系统默认来电 ***
*
* @return MediaPlayer对象
* @throws Exception
*/
public static void defaultCallMediaPlayer(Context mContext) {
try {
Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
Ringtone r = RingtoneManager.getRingtone(mContext, notification);
r.play();
} catch (Exception ex) {
}
}
/**
* 播放系统默认闹钟 ***
*
* @return MediaPlayer对象
* @throws Exception
*/
public static void defaultAlarmMediaPlayer(Context mContext) {
try {
Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
Ringtone r = RingtoneManager.getRingtone(mContext, notification);
r.play();
} catch (Exception ex) {
}
}
}
三、在.class活动的()方法里注册广播实例,代码如下:
public class MainActivity extends AppCompatActivity {
//声明一个操作常量字符串
public static final String ACTION_SERVICE_NEED = "action.ServiceNeed";
//声明一个内部广播实例
public ServiceNeedBroadcastReceiver broadcastReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/**
* 添加标志位,允许锁屏状态下显示消息,四个标志位分别是:
* 1.锁屏状态下显示
* 2.解锁
* 3.保持屏幕长亮(可选)
* 4.打开屏幕
* 当Activity启动的时候,它会解锁并亮屏显示
*/
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED //锁屏状态下显示
| WindowManager.LayoutParams.FLAG_DI *** ISS_KEYGUARD //解锁
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON //保持屏幕长亮
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); //打开屏幕
/**
* 注册广播实例(在初始化的时候)
*/
IntentFilter filter = new IntentFilter();
//给意图过虑器增加一个Action(用来区分广播来源,相当于是广播的身份证)
filter.addAction(ACTION_SERVICE_NEED);
broadcastReceiver = new ServiceNeedBroadcastReceiver();
registerReceiver(broadcastReceiver, filter);
}
四、服务里给广播接口器发送指令,代码如下:
public class taskService extends Service {
/**
* 调用startService()启动服务时的回调
*/
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
/在Service服务类中发送广播消息给Activity活动界面
Intent intentBroadcastReceiver = new Intent();
//设置意图过虑器Action(用来区分广播来源,相当于是广播的身份证)
intentBroadcastReceiver.setAction(MainActivity.ACTION_SERVICE_NEED);
//添加NEW_TASK标志位(必须加这个,否则不能在锁屏下实现消息提醒)
intentBroadcastReceiver.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//发送无序广播
sendBroadcast(intentBroadcastReceiver);
return super.onStartCommand(intent, flags, startId);
}
/**
* 通过bindService()绑定到服务的客户端
*/
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
以上就是“游戏陪玩平台源码开发,锁屏状态下消息提醒的实现”的全部内容了,希望对大家有帮助。
版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,请告知我们,本站将立刻删除涉嫌侵权内容。
相关文章
新开传奇私服网站专注于服务广大新开传奇首区和复古传奇私服玩家,我们承诺全年无休,每天为您提供最新的新开传奇网站和传奇sf999信息。...
2025-01-03
明确否认him存在,但是我们可以从一些蛛丝马迹中发现官方有说谎的可能性。就有细心的玩家,从这五个地方观察到了him存在,总共4个证据。...
2025-01-03
8条回答:【推荐答案】主公莫慌(手游)-新手奖励1.序列号:gsaq6617(官方)固定唯一,可重复激活无数新账号。2.奖励:3000绿钻,1000将魂,1紫将...
2025-01-03
网盘提取码: xawy帝国cms内核仿《新趣头条》娱乐游戏资讯网站源码,适合做电竞,娱乐,评测类的站点。利用模板改改可以轻松完成1个站点。不带安装教程...
2025-01-03
热评文章
2022年专属火龙之神途新版
1.80龙神合击传奇
1.76永恒小极品+5复古传奇
1.76双倍魔天大极品第三季单职业
1.76神梦传奇三职业
1.80聖统圣统合击三职业传奇