1

В моем приложении есть условие, которое проверяет каждый день, и если оно становится истинным, тогда я хочу, чтобы мое приложение приблизилось к пробегу, как к сбою, и стек также становится ясным.Запуск приложения Приложение от BroadcastReceiver

Я попытался проверить множество решений, но не нашел тот, который работает так, как я хотел. Мой BroadcastReceiver:

public void onReceive(Context context, Intent intent) { 
     PreferenceForApp prefs = new PreferenceForApp(context); 
     Bundle bundle = intent.getExtras(); 
     if (bundle!=null){ 
      if(bundle.containsKey("exception")) { 

//    String e = bundle.getString("exception") 
       if(bundle.get("exception").toString().equalsIgnoreCase("http request failed with error_msg No Match Found")) { 
        prefs.setIsDeviceValidated(false); 
        prefs.setIsLogIn(false); 
        Log.i("Time", "Exception Occur"); 

        Intent CSPIntent=new Intent(context,CSPLoginActivity.class); 
        CSPIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP); 
        CSPIntent.putExtra("close_activity", true); 
        Log.i("Time", "IntentExit"); 
        context.startActivity(CSPIntent); 
       } 
      } 
     } 
    } 
} 

И код завершения в деятельности я звоню из BroadcastReceiver:

if (getIntent().getBooleanExtra("close_activity",false)) { 
    Log.i("Time", "ExitCSPLogin"); 
    this.finish(); 
} 

Этот код не закрывает приложения между пробеге.

+0

вы должны использовать этот флаг в OnCreate, чтобы проверить устройство действительный или нет, каждый раз, когда пользователь вводит ваше приложение (его средства в вашем первом действии). попробуй. –

ответ

1

Вам необходимо зарегистрироваться BroadcastReceiver в вашей деятельности и отправить трансляцию в BroadcastReceiver, если вы хотите закрыть заявку.

В вашей деятельности попробовать это:

IntentFilter intentFilter = new IntentFilter(); 
intentFilter.addAction("com.package.ACTION_CLOSE");; 
BroadcastReceiver Receiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      finish(); 
     } 
    }; 
registerReceiver(Receiver, intentFilter); 

в onDestroy() метод вас активность незарегистрированный BroadcastReceiver:

@Override 
protected void onDestroy() { 
    unregisterReceiver(Receiver); 
    super.onDestroy(); 
} 

Теперь, когда вы хотите закрыть запущенные приложения отправить радиопередачу на BroadcastReceiver:

Intent broadcastIntent = new Intent(); 
broadcastIntent.setAction("com.package.ACTION_CLOSE"); 
sendBroadcast(broadcastIntent); 

Надеюсь, это поможет!

+0

Должен ли я добавить abv 2 кода в MainActivity или активность, которую я хочу позвонить из BroadcastReceiver? –

+0

@ young_08 вам нужно позвонить выше 2-го кода в своей деятельности, чтобы закрыть приложение и отправить широковещательную передачу в любом месте, чтобы закрыть приложение. – Rajesh

+0

Эй, спасибо, этот код работает для меня. В самом деле !!! Благодарю . –

0

Вы должны проверить условие ниже в методе mainActivity вашего приложения onCreate каждый раз, когда пользователь вводит ваше приложение. или в onResume, если вы хотите, чтобы закрыть приложение сразу

if (!prefs.getIsDeviceValidated()) { 
    Log.i("Time", "ExitCSPLogin"); 
    this.finish(); 
} 

я предполагаю, что у вас есть более чем один вид деятельности в приложении, так InstEd проверки выше флага в любой деятельности, мы будем положить его в основной деятельности. позволяет пользователю использовать ваше приложение, пока он/она не придет в mainActivity

Примечание: создать вещательный приемник для вашего приложения (добавить в манифесте), а не для конкретной деятельности

+0

Nops, я изменил код в соответствии с рекомендациями по ур, но он не сработал для меня. Его не приходят на главную деятельность, и поэтому я не закрываю свое приложение. –

+0

просто проверьте измененный код, измените условие как -> if (! Prefs.getIsDeviceValidated()) –

+0

эй, это тоже не работает для меня. Его не вызывает класс MainActivity. я не знаю, почему –