2012-07-03 16 views
8

मैं अपने विश्वविद्यालय के लिए एक शोध परियोजना पर काम कर रहा हूं। ऐप को कभी भी बाजार में नहीं रखा जाएगा और केवल अनुसंधान के लिए इस्तेमाल किया जाएगा।होमस्क्रीन ऐप में होम बटन अक्षम करें?

मैंने Google होमस्क्रीन नमूना कोड का उपयोग कर होमस्क्रीन ऐप बनाया है। वहां, मैंने एक गतिविधि बनाई है जो एक लॉकस्क्रीन है। वहीं, उपयोगकर्ता को होम, बैक इत्यादि दबाकर लॉक से बाहर निकलने में सक्षम नहीं होना चाहिए। बैक-बटन अक्षम होने लगते हैं, लेकिन होम-बटन नहीं है। मैंने इंटरनेट और स्टैक ओवरफ्लो से कई समाधानों का प्रयास किया है, जो सभी काम नहीं कर रहे हैं।

:

यहाँ महत्वपूर्ण कोड है (सूचना: Logcat चलता "बटन दबाया: 4"! बैक बटन लेकिन घर बटन के लिए कुछ भी नहीं है के लिए)

मेरी लॉक स्क्रीन गतिविधि में :

@Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     Log.v(TAG, "BUTTON PRESSED: " + new Integer(keyCode).toString()); 

     if ((keyCode == KeyEvent.KEYCODE_BACK)) { 
      return true; 
     } else if ((keyCode == KeyEvent.KEYCODE_CALL)) { 
      return true; 
     } 
     else if ((keyCode == KeyEvent.KEYCODE_HOME)){ 
      return true; 
     } 
     return super.onKeyDown(keyCode, event); 
    } 

    @Override 
    public void onAttachedToWindow() { 
     this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); 
     super.onAttachedToWindow(); 
    } 

यह onAttachedToWindow() विधि की तरह लगता है के बाद से Android संस्करण काम नहीं कर रहा 4. मैं कैसे homebutton निष्क्रिय कर सकते हैं?

संपादित करें: मैनिफ़ेस्ट फ़ाइल:

<?xml version="1.0" encoding="utf-8"?> 

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.android.home" > 

    <uses-permission android:name="android.permission.CALL_PHONE" /> 
    <uses-permission android:name="android.permission.GET_TASKS" /> 
    <uses-permission android:name="android.permission.READ_CONTACTS" /> 
    <uses-permission android:name="android.permission.SET_WALLPAPER" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.EXPAND_STATUS_BAR" /> 
    <uses-permission android:name="android.permission.NFC" /> 
    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" /> 

    <permission android:name="android.permission.WRITE_SECURE_SETTINGS" > 
    </permission> 

    <application 
     android:icon="@drawable/ic_launcher_home" 
     android:label="@string/home_title" > 
     <service android:name=".MyService" > 
     </service> 

     <activity 
      android:name="Home" 
      android:launchMode="singleInstance" 
      android:stateNotNeeded="true" 
      android:theme="@style/Theme" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.HOME" /> 
       <category android:name="android.intent.category.DEFAULT" /> 


      </intent-filter> 

      <receiver android:name=".ScreenReceiver" > 
       <intent-filter> 
        <action android:name="android.intent.action.SCREEN_ON" /> 
        <action android:name="android.intent.action.SCREEN_OFF" /> 
        <action android:name="android.intent.action.USER_PRESENT" /> 
       </intent-filter> 
      </receiver> 
     </activity> 
     <activity 
      android:name="Wallpaper" 
      android:icon="@drawable/bg_android_icon" 
      android:label="Wallpaper" > 
      <intent-filter> 
       <action android:name="android.intent.action.SET_WALLPAPER" /> 

       <category android:name="android.intent.category.DEFAULT" /> 
      </intent-filter> 
     </activity> 
     <activity android:name=".LockPage" > 
      <intent-filter> 
       <action android:name="android.intent.action.SCREEN_ON" /> 
       <action android:name="android.intent.action.SCREEN_OFF" /> 
       <action android:name="android.intent.action.USER_PRESENT" /> 
       <action android:name="android.nfc.action.NDEF_DISCOVERED" /> 
       <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.MONKEY" /> 
       <category android:name="android.intent.category.DEFAULT" /> 

       <action android:name="android.intent.action.MAIN" /> 

       <data android:mimeType="text/plain" /> 
      </intent-filter> 
      <intent-filter> 
       <action android:name="android.nfc.action.NDEF_DISCOVERED" /> 

       <category android:name="android.intent.category.DEFAULT" /> 

       <data android:scheme="http" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 
+0

http://stackoverflow.com/questions/3898876/how-to में काम करता है -डिसेबल-द-होम-की/888 9913 # 888 9913 – user370305

+1

ऐसा लगता है कि मैंने पोस्ट की गई सटीक चीज़ को इंगित किया है? या क्या मैं उस बिंदु को याद कर रहा हूं जिसे आप बनाने की कोशिश कर रहे हैं? – hamena314

+0

क्या आपने यह कोशिश की है [एक?] (Http://stackoverflow.com/questions/10025660/override-home-and-back-button-is-case-a-boolean-is-true/10025904#10025904) –

उत्तर

5

यह थोड़ा देर हो सकता है, मैं कुछ समान स्थिति में रहा हूं। मेरी समस्या यह थी कि मैं नहीं चाहता था कि उपयोगकर्ता फोन कॉल के दौरान कॉल स्क्रीन छोड़ दें लेकिन मैं इसे रोक नहीं सका, इसलिए इसके बजाय मैंने इसे हर बार सामने लाया जब वे इसे छोड़ देते थे।

आपके मामले में आप बस अपने एप्लिकेशन वापस सामने से ठहराव पर ला सकता है:

@Override 
protected void onPause() { 
    super.onPause(); 
     // Close and reopen app or bringToFront() 
} 

तो स्वचालित रूप से फिर से एप्लिकेशन को खोलने होगा छोड़कर। आपको या तो अपनी गतिविधि को फिर से खोलने या इसे सामने लाने की कोशिश करनी चाहिए और देखें कि सबसे अच्छा क्या काम करता है। यदि आप सभी एनिमेशन हटाते हैं और FLAG_ACTIVITY_NO_ANIMATION जोड़ते हैं तो फिर से खोलना अनजान हो सकता है।

1

यह Android स्रोत को बदले बिना संभव नहीं है: [यहाँ उल्लेख] [1]।

इसके अलावा यह एंड्रॉइड गतिविधि चक्र को तोड़ देगा, जिसकी अनुशंसा नहीं की जाती है।

+0

-1 है, यह प्रश्न लॉकस्क्रीन के लिए है, नियमित ऐप नहीं। – Matsemann

+0

कोड के प्रारंभिक संस्करण में, कार्यक्रम केवल एक ही गतिविधि थी। मैं गतिविधि के लिए होम बटन को इंगित करने में सक्षम था और इसलिए केवल इस उद्देश्य के लिए इसका उपयोग कर रहा था। शायद चारों ओर एक रास्ता है? – hamena314

2

ऐसा लगता है कि होम बटन प्रेस होमस्क्रीन एप्लिकेशन में ऐप को अग्रेषित नहीं किया जाता है। इसलिए मैंने एक सामान्य ऐप बनाया, मेरा प्रसारण रिसीवर और मेरी सेवा डाली और अब मैं होमबटन और बैकबटन को अक्षम कर सकता हूं।

अभी भी हालिया ऐप्स बटन का उपयोग मेरी लॉकस्क्रीन से बाहर निकलने के लिए किया जा सकता है। आप इसे डमी प्रविष्टियों के साथ बाढ़ कर सकते हैं जो काम कर सकते हैं।

आशा है कि किसी की मदद करें!

2
@Override 
public void onAttachedToWindow() 
{ 
    super.onAttachedToWindow(); 
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);   
} 

और अब इस तरह महत्वपूर्ण घटना को संभालने,

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) 
{ 
    if(keyCode == KeyEvent.KEYCODE_HOME) 
    { 
     Log.i("Home Button","Clicked"); 
    } 
    if(keyCode==KeyEvent.KEYCODE_BACK) 
    { 
     finish(); 
    } 
return false; 
} 
1

इस कोड को अपने आवेदन

@Override 
public void onAttachedToWindow() { 
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); 
    super.onAttachedToWindow(); 
}