Android 广播接收器强制关闭我的应用程序
我创建了一个广播接收器来启动如下活动:Android 广播接收器强制关闭我的应用程序,android,broadcastreceiver,Android,Broadcastreceiver,我创建了一个广播接收器来启动如下活动: public class BroadcastReceiver1 extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub Toast.makeText(context, "Broadcast radi", Toast.LENGTH_SHOR
public class BroadcastReceiver1 extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Toast.makeText(context, "Broadcast radi", Toast.LENGTH_SHORT).show();
Intent intent1 = new Intent(context, ShootTheDuckActivity.class);
intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent1);
}
}
public class ShootTheDuckActivity extends Activity {
public static String filename="Settings";
SharedPreferences data;
SharedPreferences.Editor editor;
int tezinaProblema=0;//0-Easy; 1-Medium; 2-Hard
static double brzina = 1;
int indikator=0;
static MediaPlayer shot;
MediaPlayer explosion;
MediaPlayer player;
private boolean PozivIzMenija=false;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.shoottheduck);
Toast.makeText(ShootTheDuckActivity.this, "Shoot the bird to shut down alarm", Toast.LENGTH_LONG).show();
data=getSharedPreferences(filename,0);
editor=data.edit();
tezinaProblema=data.getInt("Lvl:", 0);
if (tezinaProblema == 0) {
brzina = 1;
} else {
if (tezinaProblema == 1) {
brzina = 0.5;
} else {
if (tezinaProblema == 2) {
brzina = 0.2;
}
}
}
Bundle podesavanja = getIntent().getExtras();
PozivIzMenija=podesavanja.getBoolean("PozivIzMenija");
if(PozivIzMenija==false){
player = MediaPlayer.create(this, R.raw.demo); //vec postoji
player.setLooping(true); // Set looping //vec postoji
player.start(); //vec postoji
}
shot = MediaPlayer.create(this, R.raw.pucanj);
shot.setLooping(false);
explosion = MediaPlayer.create(this, R.raw.explosion);
explosion.setLooping(false);
final ImageView button = (ImageView) findViewById(R.id.imageViewSD1);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Perform action on click
indikator=1;
if(PozivIzMenija==false){
player.stop(); //vec postoji
}
button.setImageResource(R.drawable.background);
button.setBackgroundResource(R.drawable.explosion);
AnimationDrawable explosionAnimation = (AnimationDrawable) button.getBackground();
explosionAnimation.start();
explosion.start();
Timer timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
finish();
}
}, 1100);
//finish();
}
});
Thread thr = new Thread(mTask);
thr.start();
}
Runnable mTask = new Runnable() {
public void run() {
// just sleep for x seconds.
int i;
i=1;
while (i!=0) {
try {
Thread.sleep((long) (50*brzina));
runOnUiThread(done);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
i=i+1;
if (indikator==1) {break;}
}
}
};
int a=10;
int b=10;
int a1=10;
int b1=10;
static int left;
static int right;
static int top;
static int bottom;
Runnable done = new Runnable() {
public void run() {
final ImageView button = (ImageView) findViewById(R.id.imageViewSD1);
if (button.getRight()>getApplicationContext().getResources().getDisplayMetrics().widthPixels*0.95) {
a=(-1)*a1;
}
else {
if (button.getLeft()<10) {
a=a1;
}
}
if (button.getBottom()>getApplicationContext().getResources().getDisplayMetrics().heightPixels*0.7) {
b=(-1)*b1;
}
else {
if (button.getTop()<10) {
b=b1;
}
}
button.post(new Runnable() {
public void run() {
//button.offsetLeftAndRight(a);
//button.offsetTopAndBottom(b);
//button.bringToFront();
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
lp = (LinearLayout.LayoutParams) button.getLayoutParams();
left = lp.leftMargin;
right = lp.rightMargin;
top = lp.topMargin;
bottom = lp.bottomMargin;
lp.setMargins(left+a, top+b, right-a, bottom-b);
button.setLayoutParams(lp);
}
});
//button.offsetLeftAndRight(a);
//button.offsetTopAndBottom(b);
//button.setText("aaa");
}
};
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
shot.start();
return true;
}
return super.onTouchEvent(event);
}
public void onDestroy() {
super.onDestroy();
if(PozivIzMenija==false){
player.stop(); //vec postoji
}
}
public void onBackPressed() {
if(PozivIzMenija==true){
finish();
return ;
}
PendingIntent pendingIntent;
Context mContext = this.getApplicationContext();
Intent intent = new Intent();
Calendar c = Calendar.getInstance();
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
Random generator = new Random();
int i = generator.nextInt(1000000);
intent.setClass(mContext, ShootTheDuckActivity.class);
pendingIntent = PendingIntent.getActivity(mContext, i, intent, 0);
c.set(Calendar.MINUTE,c.get(Calendar.MINUTE)+1);
am.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pendingIntent);
Toast.makeText(ShootTheDuckActivity.this, "Snooze", Toast.LENGTH_LONG).show();
finish();
}
}
但我的应用程序强制关闭,它在LogCat中给出mi:
03-03 16:58:31.454: D/dalvikvm(3738): GC_EXTERNAL_ALLOC freed 120K, 51% free 2700K/5447K, external 1034K/1038K, paused 54ms
03-03 16:58:59.834: D/dalvikvm(3738): GC_EXTERNAL_ALLOC freed 117K, 50% free 2769K/5511K, external 1374K/1558K, paused 57ms
03-03 16:58:59.973: D/AndroidRuntime(3738): Shutting down VM
03-03 16:58:59.973: W/dalvikvm(3738): threadid=1: thread exiting with uncaught exception (group=0x40015560)
03-03 16:58:59.995: E/AndroidRuntime(3738): FATAL EXCEPTION: main
03-03 16:58:59.995: E/AndroidRuntime(3738): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.etfpodgorica.WakeUpAlarm/com.etfpodgorica.WakeUpAlarm.ShootTheDuckActivity}: java.lang.NullPointerException
03-03 16:58:59.995: E/AndroidRuntime(3738): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
03-03 16:58:59.995: E/AndroidRuntime(3738): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
03-03 16:58:59.995: E/AndroidRuntime(3738): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
03-03 16:58:59.995: E/AndroidRuntime(3738): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
03-03 16:58:59.995: E/AndroidRuntime(3738): at android.os.Handler.dispatchMessage(Handler.java:99)
03-03 16:58:59.995: E/AndroidRuntime(3738): at android.os.Looper.loop(Looper.java:123)
03-03 16:58:59.995: E/AndroidRuntime(3738): at android.app.ActivityThread.main(ActivityThread.java:3683)
03-03 16:58:59.995: E/AndroidRuntime(3738): at java.lang.reflect.Method.invokeNative(Native Method)
03-03 16:58:59.995: E/AndroidRuntime(3738): at java.lang.reflect.Method.invoke(Method.java:507)
03-03 16:58:59.995: E/AndroidRuntime(3738): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
03-03 16:58:59.995: E/AndroidRuntime(3738): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
03-03 16:58:59.995: E/AndroidRuntime(3738): at dalvik.system.NativeStart.main(Native Method)
03-03 16:58:59.995: E/AndroidRuntime(3738): Caused by: java.lang.NullPointerException
03-03 16:58:59.995: E/AndroidRuntime(3738): at com.etfpodgorica.WakeUpAlarm.ShootTheDuckActivity.onCreate(ShootTheDuckActivity.java:61)
03-03 16:58:59.995: E/AndroidRuntime(3738): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-03 16:58:59.995: E/AndroidRuntime(3738): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
03-03 16:58:59.995: E/AndroidRuntime(3738): ... 11 more
拍摄Ducka活动如下所示:
public class BroadcastReceiver1 extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Toast.makeText(context, "Broadcast radi", Toast.LENGTH_SHORT).show();
Intent intent1 = new Intent(context, ShootTheDuckActivity.class);
intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent1);
}
}
public class ShootTheDuckActivity extends Activity {
public static String filename="Settings";
SharedPreferences data;
SharedPreferences.Editor editor;
int tezinaProblema=0;//0-Easy; 1-Medium; 2-Hard
static double brzina = 1;
int indikator=0;
static MediaPlayer shot;
MediaPlayer explosion;
MediaPlayer player;
private boolean PozivIzMenija=false;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.shoottheduck);
Toast.makeText(ShootTheDuckActivity.this, "Shoot the bird to shut down alarm", Toast.LENGTH_LONG).show();
data=getSharedPreferences(filename,0);
editor=data.edit();
tezinaProblema=data.getInt("Lvl:", 0);
if (tezinaProblema == 0) {
brzina = 1;
} else {
if (tezinaProblema == 1) {
brzina = 0.5;
} else {
if (tezinaProblema == 2) {
brzina = 0.2;
}
}
}
Bundle podesavanja = getIntent().getExtras();
PozivIzMenija=podesavanja.getBoolean("PozivIzMenija");
if(PozivIzMenija==false){
player = MediaPlayer.create(this, R.raw.demo); //vec postoji
player.setLooping(true); // Set looping //vec postoji
player.start(); //vec postoji
}
shot = MediaPlayer.create(this, R.raw.pucanj);
shot.setLooping(false);
explosion = MediaPlayer.create(this, R.raw.explosion);
explosion.setLooping(false);
final ImageView button = (ImageView) findViewById(R.id.imageViewSD1);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Perform action on click
indikator=1;
if(PozivIzMenija==false){
player.stop(); //vec postoji
}
button.setImageResource(R.drawable.background);
button.setBackgroundResource(R.drawable.explosion);
AnimationDrawable explosionAnimation = (AnimationDrawable) button.getBackground();
explosionAnimation.start();
explosion.start();
Timer timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
finish();
}
}, 1100);
//finish();
}
});
Thread thr = new Thread(mTask);
thr.start();
}
Runnable mTask = new Runnable() {
public void run() {
// just sleep for x seconds.
int i;
i=1;
while (i!=0) {
try {
Thread.sleep((long) (50*brzina));
runOnUiThread(done);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
i=i+1;
if (indikator==1) {break;}
}
}
};
int a=10;
int b=10;
int a1=10;
int b1=10;
static int left;
static int right;
static int top;
static int bottom;
Runnable done = new Runnable() {
public void run() {
final ImageView button = (ImageView) findViewById(R.id.imageViewSD1);
if (button.getRight()>getApplicationContext().getResources().getDisplayMetrics().widthPixels*0.95) {
a=(-1)*a1;
}
else {
if (button.getLeft()<10) {
a=a1;
}
}
if (button.getBottom()>getApplicationContext().getResources().getDisplayMetrics().heightPixels*0.7) {
b=(-1)*b1;
}
else {
if (button.getTop()<10) {
b=b1;
}
}
button.post(new Runnable() {
public void run() {
//button.offsetLeftAndRight(a);
//button.offsetTopAndBottom(b);
//button.bringToFront();
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
lp = (LinearLayout.LayoutParams) button.getLayoutParams();
left = lp.leftMargin;
right = lp.rightMargin;
top = lp.topMargin;
bottom = lp.bottomMargin;
lp.setMargins(left+a, top+b, right-a, bottom-b);
button.setLayoutParams(lp);
}
});
//button.offsetLeftAndRight(a);
//button.offsetTopAndBottom(b);
//button.setText("aaa");
}
};
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
shot.start();
return true;
}
return super.onTouchEvent(event);
}
public void onDestroy() {
super.onDestroy();
if(PozivIzMenija==false){
player.stop(); //vec postoji
}
}
public void onBackPressed() {
if(PozivIzMenija==true){
finish();
return ;
}
PendingIntent pendingIntent;
Context mContext = this.getApplicationContext();
Intent intent = new Intent();
Calendar c = Calendar.getInstance();
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
Random generator = new Random();
int i = generator.nextInt(1000000);
intent.setClass(mContext, ShootTheDuckActivity.class);
pendingIntent = PendingIntent.getActivity(mContext, i, intent, 0);
c.set(Calendar.MINUTE,c.get(Calendar.MINUTE)+1);
am.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pendingIntent);
Toast.makeText(ShootTheDuckActivity.this, "Snooze", Toast.LENGTH_LONG).show();
finish();
}
}
public类ShootTheDuckActivity扩展活动{
公共静态字符串filename=“设置”;
共享参考数据;
SharedReferences.Editor;
int-tezinaProblema=0;//0-容易;1-中等;2-难
静态双brzina=1;
int indikator=0;
静态媒体播放器镜头;
媒体播放器爆炸;
媒体播放器;
私有布尔PozivIzMenija=false;
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
设置内容视图(R.layout.shoottheduck);
Toast.makeText(ShootTheDuckActivity.this,“射杀小鸟以关闭警报”,Toast.LENGTH\u LONG.show();
数据=GetSharedReferences(文件名,0);
editor=data.edit();
tezinaProblema=data.getInt(“Lvl:”,0);
如果(问题a==0){
brzina=1;
}否则{
如果(问题a==1){
brzina=0.5;
}否则{
如果(问题a==2){
brzina=0.2;
}
}
}
Bundle podesavanja=getIntent().getExtras();
PozivIzMenija=podesavanja.getBoolean(“PozivIzMenija”);
如果(PozivIzMenija==false){
player=MediaPlayer.create(this,R.raw.demo);//vec postoji
player.setLooping(true);//Set looping//vec postoji
player.start();//vec postoji
}
shot=MediaPlayer.create(这个,R.raw.pucanj);
shot.setLooping(假);
explosion=MediaPlayer.create(这个,R.raw.explosion);
爆炸。设置循环(错误);
最终ImageView按钮=(ImageView)findViewById(R.id.imageViewSD1);
setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
//单击后执行操作
indikator=1;
如果(PozivIzMenija==false){
player.stop();//vec postoji
}
按钮.setImageResource(R.drawable.background);
按钮。setBackgroundResource(R.可绘制。爆炸);
AnimationDrawable explosionAnimation=(AnimationDrawable)按钮。getBackground();
explosionAnimation.start();
explosion.start();
定时器=新定时器();
timer.schedule(新TimerTask(){
公开募捐{
完成();
}
}, 1100);
//完成();
}
});
线程thr=新线程(mTask);
thr.start();
}
Runnable mTask=new Runnable(){
公开募捐{
//只需睡x秒钟。
int i;
i=1;
而(i!=0){
试一试{
睡眠((长)(50*brzina));
runOnUiThread(完成);
}捕捉(中断异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
i=i+1;
如果(indikator==1){break;}
}
}
};
INTA=10;
int b=10;
int a1=10;
int b1=10;
静态int左;
静态整数权;
静态int-top;
静态内底;
Runnable done=new Runnable(){
公开募捐{
最终ImageView按钮=(ImageView)findViewById(R.id.imageViewSD1);
如果(button.getRight()>getApplicationContext().getResources().getDisplayMetrics().widthPixels*0.95){
a=(-1)*a1;
}
否则{
如果(button.getLeft()getApplicationContext().getResources().getDisplayMetrics().heightPixels*0.7){
b=(-1)*b1;
}
否则{
如果(button.getTop()那么,首先,您没有提供一个带有意图的包,您正在使用它来开始您的鸭子射击活动(你可能想在你的问题中包含这个小插曲)。但是,作为第一个猜测-在活动中你明确假设意图#getExtras()不会返回null(它可以)。也许在这里添加null检查
Bundle podesavanja = getIntent().getExtras();
PozivIzMenija=podesavanja.getBoolean("PozivIzMenija");
嗯,我可以从我的主要活动开始此活动,而不提供捆绑包。如果我尝试从接收者或服务开始此活动,则会发生这种情况。仅当我从某个菜单活动开始此活动时,才会提供捆绑包。在何处以及如何实施您的建议?我将尝试如何看到?很抱歉,我是一个noob。找到了它。这是一个:PozivIzMenija=podesavanja.getBoolean(“PozivIzMenija”);如果您正在使用Eclipse,您可以打开shootthedukActivity.java文件并按CTRL+L,键入61,它将转到代码中的该行。然后它就是Bundle。在接收器中添加空检查或提供一些额外内容。