2011-11-10 24 views
9

वेक और अनलॉक करें मैं यह समझने की कोशिश कर रहा हूं कि सेवा के साथ फोन को कैसे जगाया जाए और अनलॉक किया जाए। मैं this पोस्ट का जिक्र कर रहा हूं लेकिन, मुझे पता नहीं चल रहा है कि यह क्यों काम नहीं कर रहा है।एंड्रॉइड: फोन

public class WakephoneActivity extends Activity { 

    BroadcastReceiver mReceiver; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     mReceiver = new BroadcastReceiver() { 

      @Override 
      public void onReceive(Context context, Intent intent) { 
       // Log.v(TAG, "Screen OFF onReceive()"); 
       screenOFFHandler.sendEmptyMessageDelayed(0, 2000); 
      } 
     }; 
    } 

    private Handler screenOFFHandler = new Handler() { 

     @Override 
     public void handleMessage(Message msg) { 
      super.handleMessage(msg); 
      // do something 
      // wake up phone 
      // Log.i(TAG, "ake up the phone and disable keyguard"); 
      PowerManager powerManager = (PowerManager) WakephoneActivity.this 
        .getSystemService(Context.POWER_SERVICE); 
      long l = SystemClock.uptimeMillis(); 
      powerManager.userActivity(l, false);// false will bring the screen 
      // back as bright as it was, true - will dim it 
     } 
    }; 

    protected void onResume() { 
     super.onResume(); 
     IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF); 
     registerReceiver(mReceiver, filter); 
     // Log.i(TAG, "broadcast receiver registered!"); 
    } 
} 

मैं भी प्रकट में कोड जोड़ लिया है: यह कोड मैं अब तक होता है। कोई विचार?

+0

दोहराया होने की जरूरत नहीं मुझे लगता है कि आप किसी भी तरह लॉक सेटिंग को हटा सकते हैं, तो आप अपनी गतिविधि पर सीधे फोन जगा सकते हैं। – njzk2

उत्तर

14

अपनी सेवा में नीचे दिए गए कोड का उपयोग करें।

PowerManager pm = (PowerManager) getApplicationContext().getSystemService(Context.POWER_SERVICE); 
     mWakeLock = pm.newWakeLock((PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP), "YourServie"); 
     mWakeLock.acquire(); 
     [...] 
     mWakeLock.release(); 

आप के साथ-साथ स्क्रीन को अनलॉक करने, आपकी सेवा में एक रिसीवर यदि स्क्रीन के चालू होने पर/बंद और अगर यह बंद कर दिया है पर नज़र रखता है कि रजिस्टर चाहते हैं और आप फोन अनलॉक करना चाहते हैं, एक गतिविधि शुरू

Window window = getWindow(); 
window.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); 
this.finish(); 
return; 

मुझे पता है, यह एक नहीं बल्कि गंदा है, लेकिन जहाँ तक मुझे पता है, वहाँ लॉकस्क्रीन अनलॉक की कोई दूसरा रास्ता नहीं है (और यह केवल अगर कोई पासवर्ड आदि कर रहे हैं काम करेंगे: onCreate में इस कोड के साथ सेट करें, इसलिए यह सामान्य "अनलॉक करने के लिए स्लाइड" स्क्रीन होना चाहिए)।

और भूल नहीं है जोड़ने के लिए android.permission.WAKE_LOCK ;-)

/संपादन: मैं बस आप पहले से ही एक गतिविधि का उपयोग कर रहे देखा। यदि आपके पास कोई है और सेवा की आवश्यकता नहीं है, तो बस इस कोड को गतिविधि में रखें।

1

सेवा के लिए allways सक्रिय होने के लिए आप प्रकट पर इस अनुमति की आवश्यकता है:

<uses-permission android:name="android.permission.WAKE_LOCK" /> 

एक और बात आपको बस इतना करना एक Wakelock adquire है। इसके बिना सेवा कुछ समय बीत जाएगी। आप इसे इस तरह कर सकते हैं:

getApplicationContext(); 
PowerManager pm = (PowerManager)getApplicationContext().getSystemService(Context.POWER_SERVICE); 
WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG); 
wl.acquire(); 

आप एक है कि आप की जरूरत करने के लिए PowerManager.PARTIAL_WAKE_LOCK को बदलने की जरूरत हो सकती है। आप उस here के बारे में जानकारी देख सकते हैं।

1

WakefulBroadcastReceiver है जो आपके लिए यह करता है। उदाहरण उपयोग:

import android.content.Context; 
import android.content.Intent; 
import android.os.SystemClock; 
import android.support.v4.content.WakefulBroadcastReceiver; 
import android.util.Log; 

public class SimpleWakefulReceiver extends WakefulBroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     // This is the Intent to deliver to our service. 
     Intent service = new Intent(context, SimpleWakefulService.class); 

     // Start the service, keeping the device awake while it is launching. 
     Log.i("SimpleWakefulReceiver", "Starting service @ " + SystemClock.elapsedRealtime()); 
     startWakefulService(context, service); 
    } 
} 

सेवा में कार्रवाई पूरी करने के बाद फोन SimpleWakefulReceiver.completeWakefulIntent(intent) सक्रिय करने वाले लॉक जारी करने के लिए।

(के रूप में @Force पहले से ही आप Wakelock के बारे में जानकारी दी, तो वे यहां ;-)

संबंधित मुद्दे