【发布时间】:2021-02-26 17:00:22
【问题描述】:
所以我正在尝试制作一个应用程序..(或者更具体地说..练习将东西放在一起,看看它们是如何工作的),如果我点击一个按钮......并且在设定的时间......它会改变我手机的壁纸。该应用程序运行完美,直到设定的时间到来..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 专家……所以我犯的错误可能很愚蠢……但我花了很多时间寻找解决方案……但一无所获。
我们将不胜感激任何形式的帮助。
【问题讨论】:
-
您的
logcat在说什么?我认为您不能像那样在广播接收器中创建MainActivity的实例 -
除了@ruben 注释,添加
WallpaperManager类或它的一部分。我认为这门课在这里给你 NPEWallpaperManager wm = WallpaperManager.getInstance(getApplicationContext()); -
@ruben,我发现错误:“尝试在空对象引用上调用虚拟方法'android.content.res.Resources android.content.Context.getResources()'”。
标签: android