2013-12-24 2 views
1

Я создаю приложение для экрана с блокировкой экрана, в этом я должен переопределить домашнюю кнопку, после того как я исследовал как в google, так и в stackoverflow, я получил результат, это сложно сделать. Здесь я упоминаю, что я сделал в своем приложении,Как обрабатывать проблему с домашней кнопкой в ​​приложениях Launcher для Android

  1. Создал службу с широковещательным приемником, чтобы показать экран блокировки, когда экран отключается. - отлично работает.

  2. Для переопределения кнопок «Дом», «Меню», «Назад» и «Поиск» я использовал следующий код: Надеюсь, что мы можем переопределить кнопку «Дом», когда приложение становится только средством запуска, поэтому в моем манифесте. Xml я добавил этот код.

    <intent-filter> 
         <action android:name="android.intent.action.MAIN" /> 
    
         <category android:name="android.intent.category.HOME" /> 
         <category android:name="android.intent.category.DEFAULT" /> 
         <!-- <category android:name="android.intent.category.LAUNCHER" /> --> 
    
        </intent-filter> 
    

Кроме того, в моей деятельности я использовал этот код слишком

@Override 
    public void onAttachedToWindow() { 

      // TODO Auto-generated method stub 
      this.getWindow().setType(
        WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG 
          | WindowManager.LayoutParams.FLAG_FULLSCREEN); 
      this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); 

     super.onAttachedToWindow(); 
    } 

До сих пор в моем примере приложения я успешно завершил выше. Теперь моя проблема:

Когда я разблокирую экран, перейдите в любое приложение, затем нажмите кнопку «Главная страница устройства», появится экран «Моя блокировка». я устал, чтобы отключить эту функцию, но я не знаю, как я могу точно это сделать, для этого я использовал код, как показано ниже,

/* This should come from a preference that let's the user select an activity that can handle the HOME intent */ 
String packageName = "com.android.launcher"; 
String packageClass = "com.android.launcher2.Launcher"; 

Intent home_intent = new Intent(Intent.ACTION_MAIN); 
home_intent.addCategory(Intent.CATEGORY_HOME); 
home_intent.setComponent(new ComponentName(packageName, packageClass)); 
home_intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); 
/* Here you should catch the exception when the launcher has been uninstalled, and let the user save themselves by opening the Market or an app list or something. Users sometimes use root apps to uninstall the system launcher, so your fake launcher is all that is left. Might as well give the poor user a hand. */ 
startActivity(home_intent); 

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

ответ

0

Попробуйте это решение,

Создать статическую переменную flag, которая устанавливается в верно, когда вы получаете радиопередачу для того, когда экран идет кремовый

теперь в вашем activity проверки, если флаг верно

@Override 
public void onAttachedToWindow() { 
    if(MyService.Flag == true){ 
    //Continue with your code ... 
    //.... 
    }else{ 
     finish(); 
    } 
} 

или сделать это на onCreate, которые когда-либо подходит для вас

После того, как ваш экран разблокирован, то

//Disable the flag 
    MyService.Flag = false; 

Теперь, когда пользователь нажимает на кнопку Home активность вызывается и снова проверить снова флаг и если его ложно, то вызовите finish(), чтобы закрыть свою деятельность

+0

я инициализировать этот флаг в моей службе? – Aerrow

+0

вы можете объяснить шаг за шагом способом – Aerrow

+0

@Aerrow: Инициализировать его, когда вы получите его в режиме широковещания по методу 'onReceive()', а затем при запуске экрана блокировки отметьте флаг, ваша деятельность также вызывается при нажатии на кнопку чтобы проверка флага помогла вам –