Я пытаюсь показать активность в своем приложении, когда срабатывает уведомление и экран устройства выключен. Это действие представляет собой экран для обработки входящего вызова.
Пока что это работает с устройством 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, чтобы я мог применить решение к своему собственному приложению.
Любая помощь будет принята с благодарностью.