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。在接收器中添加空检查或提供一些额外内容。