1

1) Мне нужно запустить действие при срабатывании будильника, я попытался добавить действие, когда в onRecieve событие BroadCastReceiver, но его сбой.Запуск активности при срабатывании тревоги

public class AlarmReceiver extends BroadcastReceiver { 
public void onReceive(Context context, Intent intent){ 
    Toast.makeText(context, "Recieved!!", Toast.LENGTH_LONG).show(); 

    Activity act = new Activity(); 
    act.startActivity(intent); 
    } 
} 

Ошибка:

06-22 13:42:00.733: W/dalvikvm(750): threadid=1: thread exiting with uncaught exception (group=0x40015560) 
06-22 13:42:00.763: E/AndroidRuntime(750): FATAL EXCEPTION: main 
06-22 13:42:00.763: E/AndroidRuntime(750): java.lang.RuntimeException: Unable to start receiver com.exercise.AndroidTime.AlarmReceiver: java.lang.NullPointerException 
06-22 13:42:00.763: E/AndroidRuntime(750): at android.app.ActivityThread.handleReceiver(ActivityThread.java:1805) 
06-22 13:42:00.763: E/AndroidRuntime(750): at android.app.ActivityThread.access$2400(ActivityThread.java:117) 
06-22 13:42:00.763: E/AndroidRuntime(750): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:981) 
06-22 13:42:00.763: E/AndroidRuntime(750): at android.os.Handler.dispatchMessage(Handler.java:99) 
06-22 13:42:00.763: E/AndroidRuntime(750): at android.os.Looper.loop(Looper.java:123) 
06-22 13:42:00.763: E/AndroidRuntime(750): at android.app.ActivityThread.main(ActivityThread.java:3683) 
06-22 13:42:00.763: E/AndroidRuntime(750): at java.lang.reflect.Method.invokeNative(Native Method) 
06-22 13:42:00.763: E/AndroidRuntime(750): at java.lang.reflect.Method.invoke(Method.java:507) 
06-22 13:42:00.763: E/AndroidRuntime(750): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
06-22 13:42:00.763: E/AndroidRuntime(750): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
06-22 13:42:00.763: E/AndroidRuntime(750): at dalvik.system.NativeStart.main(Native Method) 
06-22 13:42:00.763: E/AndroidRuntime(750): Caused by: java.lang.NullPointerException 
06-22 13:42:00.763: E/AndroidRuntime(750): at android.app.Activity.startActivityForResult(Activity.java:2827) 
06-22 13:42:00.763: E/AndroidRuntime(750): at android.app.Activity.startActivity(Activity.java:2933) 
06-22 13:42:00.763: E/AndroidRuntime(750): at com.exercise.AndroidTime.AlarmReceiver.onReceive(AlarmReceiver.java:23) 
06-22 13:42:00.763: E/AndroidRuntime(750): at android.app.ActivityThread.handleReceiver(ActivityThread.java:1794) 
06-22 13:42:00.763: E/AndroidRuntime(750): ... 10 more 

2) Как мне сделать деятельность продолжают работать, даже если кнопка нажата назад. Активность будет закрыта, если будут выполнены определенные критерии в исходном коде. Например, будильник не погаснет, и он не сможет закрыть приложение, пока пользователь не ответит на вопрос правильно.

+0

Почему это не удается? –

+0

Он говорит, что приложение неожиданно остановилось. Сила Закрыть! –

+0

да ... вам нужно быть более точным. вставьте свою ошибку logcat –

ответ

3

Запишите ниже код в свой класс BroadcastReceiver.

Intent i = new Intent(); 
i.setClassName("your package name", "your package name.your activity name"); 
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
context.startActivity(i); 

вместо

Activity act = new Activity(); 
act.startActivity(intent); 

Определить класс приемника в файл AndroidManifest.xml.

<receiver android:name="MyReceiver" > 
    <intent-filter> 
     <action android:name="de.vogella.android.mybroadcast" /> 
    </intent-filter> 
</receiver> 
+0

Получение такой же ошибки .. Приложение неожиданно остановилось. –

+0

Вы объявили свой приемник в файле манифеста андроида? –

+0

Нет ... Но я получаю сообщение о тосте, но активность не запускается. –

2

Что касается второй части, переопределить BackButton по

@Override 
public void onBackPressed() { 
    //do nothing or whatever you would want to display 
    return; 

} 

Чтобы изменить меню и кнопку Home, используйте следующий код ..

public boolean onKeyDown(int keyCode, KeyEvent event) { 

     if ((keyCode == KeyEvent.KEYCODE_HOME)) { 
      //Toast.makeText(this, "You pressed the Home button!", Toast.LENGTH_LONG).show();      
      return true; // event has been handled 
     } 

     if(keyCode == KeyEvent.KEYCODE_MENU) 
     { 
      //Toast.makeText(this, "You pressed the Menu button!", Toast.LENGTH_LONG).show(); 

      return true; // tell your phone that you have handled the event 
     } 
     return super.onKeyDown(keyCode, event); 
    } 
+0

Спасибо :) Я думаю, что мы можем сделать то же самое, чтобы переопределить нажатие кнопки меню. –

+1

Ну, не совсем. Я отредактировал свой ответ, чтобы включить кнопку «Домой» и переопределить кнопку «Меню». Пожалуйста, проверьте это. – Swayam

+1

Без проблем приятель. Счастливое кодирование! :) – Swayam

2

Измените OnReceive метод

Intent intent; 

public void onReceive(Context context, Intent intent){ 
     Toast.makeText(context, "Recieved!!", Toast.LENGTH_LONG).show(); 
     intent = new Intent(); 
     intent.setClass(context, Test.class); //Test is a dummy class name where to redirect 
     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     intent.putExtra("msg", str); 
     context.startActivity(intent); 
}