Уведомление с setFullScreenIntent не отображает активность, когда экран выключен

Я пытаюсь показать активность в своем приложении, когда срабатывает уведомление и экран устройства выключен. Это действие представляет собой экран для обработки входящего вызова.

Пока что это работает с устройством Android Nougat (Huawei P9 lite), но не работает с моим устройством Android Pie (Samsung Galaxy A20).

Из-за сложности моего приложения я пытаюсь воспроизвести это с помощью более простого проекта.

Итак, я использую этот проект, насколько я понимаю, должен делать то, что хочу.

Однако с этим кодом действие не отображается при запуске приложения и если экран выключен. Уведомление добавлено в область уведомлений.

MainActivity.java

public class MainActivity extends Activity {
  private static final String CHANNEL_WHATEVER="channel_whatever";
  private static final int NOTIFY_ID=1337;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    NotificationManager mgr=
        (NotificationManager)getSystemService(NOTIFICATION_SERVICE);

    if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.O &&
      mgr.getNotificationChannel(CHANNEL_WHATEVER)==null) {
      mgr.createNotificationChannel(new NotificationChannel(CHANNEL_WHATEVER,
        "Whatever", NotificationManager.IMPORTANCE_DEFAULT));
    }

    mgr.notify(NOTIFY_ID, buildNormal().build());

    finish();
  }

  private NotificationCompat.Builder buildNormal() {
    NotificationCompat.Builder b=
      new NotificationCompat.Builder(this, CHANNEL_WHATEVER);

    b.setAutoCancel(true)
     .setDefaults(Notification.DEFAULT_ALL)
     .setContentTitle(getString(R.string.download_complete))
     .setContentText(getString(R.string.fun))
     .setContentIntent(buildPendingIntent(Settings.ACTION_SECURITY_SETTINGS))
     .setSmallIcon(android.R.drawable.stat_sys_download_done)
      .setNumber(5)
     .setFullScreenIntent(buildPendingIntent(Settings.ACTION_DATE_SETTINGS), true)
     .addAction(android.R.drawable.ic_media_play,
         getString(R.string.play),
         buildPendingIntent(Settings.ACTION_SETTINGS));

    return(b);
  }

  private PendingIntent buildPendingIntent(String action) {
    Intent i=new Intent(action);

    return(PendingIntent.getActivity(this, 0, i, 0));
  }
}

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.commonsware.android.fullscreen"
android:versionCode="1"
android:versionName="1.0">

<uses-sdk
    android:minSdkVersion="14"
    android:targetSdkVersion="15"/>
<supports-screens android:largeScreens="true" android:smallScreens="true" android:normalScreens="true" android:xlargeScreens="true"/>
<uses-permission android:name="android.permission.VIBRATE"/>

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name">
    <activity
        android:name="MainActivity"
        android:theme="@android:style/Theme.Translucent.NoTitleBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>

            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>
</application>

</manifest>

Я тестировал это на следующих физических устройствах:

  • Android Nougat (Huawei P9 lite)
  • Устройство Android Pie (Samsung Galaxy A20)
  • Android Marshmallow (вкладка Samsung Galaxy)

Я прочитал эту документацию и знаю, что в Android 10 есть некоторые ограничения и решение, но пока я сосредотачиваюсь только на Android Pie и ниже. Конечно, тогда решение также должно работать на Android 10.

Я что-то упускаю? Я хотел бы, чтобы этот пример работал для всех версий Android, чтобы я мог применить решение к своему собственному приложению.

Любая помощь будет принята с благодарностью.




Ответы (2)


Сначала вам нужно добавить разрешение в AndroidManifest.xml:

<uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" />
person Victor Tellez    schedule 18.03.2020

Добавьте разрешения USE_FULL_SCREEN_INTENT и SYSTEM_ALERT_WINDOW в свой AndroidManifest.xml

person nzjoel    schedule 01.02.2021