android-在锁定屏幕上显示通知
作者:互联网
我成功设置了GCM通知,并且可以通过GCM从服务器端成功获取消息.
我也可以通过这些代码在android的通知栏系统上显示通知.
我尝试通过以下方式在锁定屏幕上显示通知,但没有成功:
1-添加< uses-permission android:name =“ android.permission.SYSTEM_ALERT_WINDOW” />允许
2-在manifest.xml中定义的主要活动中添加android:showOnLockScreen =“ true”
3-在java文件中添加到main Activity中:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
| WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
4-已经在“应用程序设置系统”中选中“显示通知”复选框.
知道如何在锁定屏幕上显示通知的人,
请帮助我,我做了很多搜索,但没有帮助.
谢谢,
p / s:
我正在使用三星S3,Android 4.3进行测试.已经启用锁定屏幕页面.
我从Intent Service调用show通知方法.
代码显示通知:
// Put the message into a notification and post it.
// This is just one simple example of what you might choose to do with
// a GCM message.
private void sendNotification(String msg) {
mNotificationManager = (NotificationManager)
this.getSystemService(Context.NOTIFICATION_SERVICE);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
new Intent(this, Pas.class)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_CLEAR_TASK),
PendingIntent.FLAG_CANCEL_CURRENT);
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_play_dark)
.setContentTitle("");
// Set Big View style to see full content of the message
NotificationCompat.BigTextStyle inboxStyle =
new NotificationCompat.BigTextStyle();
inboxStyle.setBuilder(mBuilder);
inboxStyle.bigText("");
inboxStyle.setBigContentTitle("");
inboxStyle.setSummaryText("");
// Moves the big view style object into the notification object.
mBuilder.setStyle(inboxStyle);
mBuilder.setContentText(msg);
mBuilder.setDefaults(Notification.DEFAULT_ALL);
mBuilder.setContentIntent(contentIntent);
mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());
}
我使用这些权限:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT" />
<uses-permission android:name="android.permission.MEDIA_CONTENT_CONTROL" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="com.trek2000.android.pas.permission.C2D_MESSAGE" />
<permission
android:name="com.trek2000.android.pas.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.android.pas.Pas"
android:showOnLockScreen="true"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- Receiver GCM -->
<receiver
android:name = "receiver.GcmBroadcastReceiver"
android:permission = "com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name = "com.google.android.c2dm.intent.RECEIVE" />
<category android:name = "com.trek2000.android.pas" />
</intent-filter>
</receiver>
<!-- Services -->
<service
android:name = "service.GcmIntentService"
android:exported = "true" />
</application>
解决方法:
我设法以这种方式在锁定屏幕上显示了通知.
这是带有注释的完整代码.
// Logic to turn on the screen
PowerManager powerManager = (PowerManager) context.getSystemService(POWER_SERVICE);
if (!powerManager.isInteractive()){ // if screen is not already on, turn it on (get wake_lock for 10 seconds)
PowerManager.WakeLock wl = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK |PowerManager.ACQUIRE_CAUSES_WAKEUP |PowerManager.ON_AFTER_RELEASE,"MH24_SCREENLOCK");
wl.acquire(10000);
PowerManager.WakeLock wl_cpu = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,"MH24_SCREENLOCK");
wl_cpu.acquire(10000);
}
// Notification stuff
NotificationCompat.Builder builder = new NotificationCompat.Builder(context.getApplicationContext());
builder.setSmallIcon(R.drawable.attendance_icon);
builder.setContentTitle("Attendance not marked");
builder.setContentText("Attendance is not marked for today. Please mark the same.");
TaskStackBuilder taskStackBuilder = TaskStackBuilder.create(context.getApplicationContext());
Intent intent = new Intent(context.getApplicationContext(), ActivityNewRecord.class);
taskStackBuilder.addParentStack(ActivityNewRecord.class);
taskStackBuilder.addNextIntent(intent);
PendingIntent pendingIntent = taskStackBuilder.getPendingIntent(100, PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(pendingIntent);
final long[] DEFAULT_VIBRATE_PATTERN = {0, 250, 250, 250};
builder.setVibrate(DEFAULT_VIBRATE_PATTERN);
builder.setLights(Color.WHITE, 2000, 3000);
builder.setSound(Settings.System.DEFAULT_NOTIFICATION_URI);
// This is the answer to OP's question, set the visibility of notification to public.
builder.setVisibility(NotificationCompat.VISIBILITY_PUBLIC);
NotificationManager notificationManager = (NotificationManager) context.getSystemService(NOTIFICATION_SERVICE);
notificationManager.notify(100, builder.build());
但是,在锁定屏幕上显示通知可能不适用于某些设备. (我在Nexus手机上进行了测试,并且可以运行,但在小米设备上却无法运行)
但是,再次收到通知后,屏幕将点亮,振动并响起.
标签:lockscreen,notifications,android 来源: https://codeday.me/bug/20191119/2039178.html