如何从广播接收器调用 GetAppContext?

How to call GetAppContext from Broadcast Receiver?

我正在尝试设置一个应用程序,我在其中从广播接收器更新数据库,但是当我有 class 时,我无法扩展 AppCompatActivity,其中有数据库所需的 getAppContext打电话,我怎样才能克服它?

 public class AlarmReceiver extends BroadcastReceiver {

public static AppDatabase database;

@Override
public void onReceive(Context context, Intent intent) {
            database = Room.databaseBuilder(getAppContext(), AppDatabase.class, "mydb").
//get app context is red there, "cant resolve method"

                    allowMainThreadQueries().

                    build();

            UserDAO userDAO = database.getUserDAO();
            User user1 = new User();
            user1.setId(2);
            user1.setName("xDDDD");
            user1.setPassword("1234");
            userDAO.insert(user1);
        }
    }

您可以:

1- 创建一个扩展应用程序 class 的应用程序 class MyApplication 并将其用作接收者的全局上下文

2-(不保证,您可以尝试)将您在 onReceive 方法中收到的上下文参数转换为 AppCompatActivity,然后调用 getAppContext

提示* 我不推荐在 onReceive 方法中使用数据库代码。最好再做一个服务或者intentservice,让服务处理数据库代码。

编辑:

首先在你的主包中创建新的class:

public class MyApplication extends Application {

    private static Context context;

    public void onCreate() {
        super.onCreate();
        MyApplication.context = getApplicationContext();
    }

    public static Context getAppContext() {
        return MyApplication.context;
    }
}

然后 在 Android 清单文件中,声明以下内容。

<application android:name="your.package.name.MyApplication">

</application>

现在在您的 onReceive 方法中或您可以调用 MyApplication.getAppContext() 的任何地方来获取您的应用程序上下文。

尝试使用 context 而不是 getAppContext(),如下所示:

database = Room.databaseBuilder(context, AppDatabase.class, "mydb").
...

Context 已经存在,足以创建和操作数据库。