android - 收到意图后警报应用程序崩溃(在 OnReceive() 中)
问题描述
所以我正在尝试制作一个应用程序..(或者更具体地说..练习把东西放在一起看看它们是如何工作的)如果我点击一个按钮就会设置一个警报......并且在设定的时间......它会改变我手机的壁纸。该应用程序运行完美,直到设定的时间到来..n 当应用程序应该更改我的墙纸时..应用程序崩溃..n 引发空指针异常。
我的 MainActivity 类代码:
package com.example.wp;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.app.WallpaperManager;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import java.io.IOException;
import java.util.Calendar;
public class MainActivity extends AppCompatActivity {
public Button b;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b = findViewById(R.id.button);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Calendar c = Calendar.getInstance();
c.set(Calendar.HOUR_OF_DAY,14); //i want to change wallpaper at 2:00 .
c.set(Calendar.MINUTE,0);
c.set(Calendar.SECOND,0);
SetAlarm(c);
}
});
}
public void changewp(){
Bitmap bit = BitmapFactory.decodeResource(getResources(),R.drawable.wp);
WallpaperManager wm = WallpaperManager.getInstance(getApplicationContext());
try {
wm.setBitmap(bit);
Toast.makeText(getApplicationContext(),"done",3).show();
} catch (IOException e) {
Toast.makeText(getApplicationContext(),"failed",3).show();
}
}
public void SetAlarm(Calendar c){
AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, alertrec.class);
PendingIntent pen = PendingIntent.getBroadcast(this, 1,intent,0);
am.setExact(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(),pen);
}
}
我的alartrec类代码:
package com.example.wp;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class alertrec extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
MainActivity m = new MainActivity();
m.changewp();
}
}
我还尝试在 onReceive() 方法中的 changewp() 方法中编写代码...bt 无法正确使用参数。因此,如果您有更好(但不太复杂)的方法来完成我正在尝试的事情..请让我知道。还有一件事……我不是 JAVA 专家……所以我犯的错误可能很愚蠢……但我花了很多时间寻找解决方案……但一无所获。
任何形式的帮助将不胜感激。
解决方案
或者您可以像这样移动changewp()
方法BroadcastReceiver
:
public class alertrec extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
changewp(context);
}
public void changewp(Context context){
Bitmap bit = BitmapFactory.decodeResource( context.getResources(),R.drawable.ic_launcher_background);
WallpaperManager wm = WallpaperManager.getInstance(context);
try {
wm.setBitmap(bit);
Toast.makeText(context,"done",Toast.LENGTH_LONG).show();
} catch (IOException e) {
Toast.makeText(context,"failed",Toast.LENGTH_LONG).show();
}
}
}
推荐阅读
- c++ - 将基类静态转换为派生指针并构造派生成员
- powershell - 如何在powershell中排除选定文件的列表
- postgresql - 无法将 NodeJs 应用程序与在 Minikube 中运行的 Postgres 连接
- python - `with` 与简单变量赋值(neo4j 驱动程序)上的 linter 错误
- swift - SwiftUI 备用视图 - 协议类型“任何”不能符合“视图”,因为只有具体类型才能符合协议
- flutter - 在列表中显示不完整的数据缺少括号右方括号
- authentication - 如何在我的 Web 应用程序中通过 Snapchat 登录并在 Asp.net C# 中获取用户名、unique_id 和名称等用户详细信息
- javascript - 无法理解 map() 方法
- webpack - 如何避免在生产构建中给出垃圾名称
- python - 如何在 Mac 上正确安装 virtualenvwrapper?