解决安卓项目中报错:Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...

一、安卓项目要求创建一个通知,应包括标题,长内容,大图片,跳转,震动,闪灯,音频,级别等信息。

二、实验过程

1.先创建一个空项目MyApplication5,然后在此项目上在创建一个空项目Notification,如下图所示:

解决安卓项目中报错:Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without..._第1张图片

2.编写相应的代码

①activity_main.xml如下:




    

2.MainActivity.java如下:

package cn.itcast.myapplication5;

import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.NotificationCompat;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import java.io.File;

public class MainActivity extends AppCompatActivity {
    String channelID="学习消息";
    String name="Android高级应用";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btn = findViewById(R.id.button);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                sendNotification();
            }
        });
    }
    public void sendNotification() {
        createNotificationChannel();
        PendingIntent pi = null;
        Intent intent=new Intent(this,Notification.class);
//        startActivity(intent);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
            pi=PendingIntent.getActivity(this, 0, intent,
                    PendingIntent.FLAG_IMMUTABLE);
        }
        else{
            pi=PendingIntent.getActivity(this, 0, intent,
                    PendingIntent.FLAG_CANCEL_CURRENT);
        }
        NotificationManager manager= (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        NotificationCompat.Builder builder=new NotificationCompat.Builder(this,channelID);
        builder.setContentTitle("学习多媒体开发之通知")
                .setContentText("通知Notification是Android系统中比较有特色的一个功能,"+"当某个应用程序希望向用户发出一些提示信息,而该应用程序又不在前台运行时,"+"就可以借助通知来实现。\n")
                .setSmallIcon(R.drawable.icon)
                .setContentIntent(pi)
                .setAutoCancel(true)
//               .setSound(Uri.fromFile(new File("/system/media/audio/ringtones/Luna.ogg")))
//                .setVibrate(new long[]{0,1000,1000,1000})
//                .setLights(Color.GREEN,1000,1000)
//                . setPriority(NotificationCompat.PRIORITY_MAX)
                 ;
        android.app.Notification notification=builder.build();
        manager.notify(1,notification);
    }
    public void createNotificationChannel() {
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
            String des="发布Android高级应用相关的学习通知";
            NotificationChannel channel = new NotificationChannel(channelID, name, NotificationManager.IMPORTANCE_HIGH);
            NotificationManager  manager=(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
            manager.createNotificationChannel(channel);
        }
    }
}

3.activity_notification.xml




    

4.Notification.java如下:

package cn.itcast.myapplication5;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.Toast;

public class Notification extends AppCompatActivity {
    String data="通知(Notification)是Android系统中比较有特色的一个功能";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_notification);
        Toast.makeText(Notification.this,data,Toast.LENGTH_LONG).show();
    }
}

三、遇到的问题

     代码编写完成后,项目能运行,但是无法实现通知,logcat中报错信息为:Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...

查询后发现:这个报错通常是由于安卓项目中使用了过期的OpenGL配置所引起的。

要解决这个问题,你可以尝试以下几个方法:

具体步骤如下:

  1. 更新OpenGL配置:

    • 打开你的安卓项目的 build.gradle 文件。
    • 在 dependencies 部分,找到包含 OpenGL 配置的依赖项。
    • 确保使用的是最新版本的 OpenGL 配置。你可以在相关的库的官方文档或者开发者社区中查找最新的版本号。
    • 修改配置后,同步并重新构建项目。
  2. 检查设备支持:

    • 在安卓项目中,找到使用了 OpenGL 功能的部分代码。
    • 在调用 OpenGL 相关方法之前,添加适当的检查:
      if (!GLES20.glGetString(GLES20.GL_EXTENSIONS).contains("your_required_extension")) {
          // 不支持所需的扩展功能,使用替代方案或者进行错误处理
      }
      
    • 根据你的需求,替换 “your_required_extension” 为你正在使用的 OpenGL 扩展名称。
  3. 检查驱动程序:

    • 在你的设备上打开图形驱动程序更新工具(例如NVIDIA Control Panel或AMD Catalyst Control Center)。
    • 检查更新选项并执行更新操作,确保你的图形驱动程序是最新的版本。
  4. 修改项目设置:

    • 打开你的安卓项目,并找到 EGL 配置相关的代码文件(通常是一个名为 EGLConfigChooser.java 或 EGLConfigChooserImpl.java 的文件)。
    • 在这个文件中,搜索包含 “EGL_SWAP_BEHAVIOR_PRESERVED” 的行。
    • 将此行注释掉或将其删除,以禁用 EGL_SWAP_BEHAVIOR_PRESERVED 选项。
    • 保存修改后的文件,重新构建项目。

完成这些步骤后,重新编译和测试你的安卓项目,应该能够解决报错问题。如果问题仍然存在,可能是你的安卓虚拟机页面错乱,或者是版本太低,无法支持。

解决办法:

        删除当前虚拟机,下载新的高版本8.0以上虚拟机,下载完成后重新运行即可。

四、运行结果如下

解决安卓项目中报错:Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without..._第2张图片

解决安卓项目中报错:Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without..._第3张图片解决安卓项目中报错:Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without..._第4张图片

你可能感兴趣的:(android)