কীভাবে আমি কোনও অ্যান্ড্রয়েড ডিভাইসকে প্রোগ্রাম্যাটিকভাবে ঘুমাতে বাধা দেব?


155

কীভাবে আমি কোনও অ্যান্ড্রয়েড ডিভাইসকে প্রোগ্রাম্যাটিকভাবে ঘুমাতে বাধা দেব?

উত্তর:


133

একটি বিকল্প ব্যবহার করতে হয় উজ্জ্বলতার লকের । দস্তাবেজ থেকে উদাহরণ:

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
wl.acquire();

// screen and CPU will stay awake during this section

wl.release();

এই পৃষ্ঠায় একটি টেবিলও রয়েছে যা বিভিন্ন ধরণের জাগলের বর্ণনা দেয়।

জাগ্রত লকগুলি ব্যবহার করার সময় কিছুটা সতর্কতা অবলম্বন করা দরকার তা সচেতন হন। আপনি release()যখন এটি সম্পন্ন করেছেন (বা অগ্রভাগে নয়) সর্বদা লক করুন তা নিশ্চিত করুন । অন্যথায় আপনার অ্যাপ্লিকেশনটি কিছু মারাত্মক ব্যাটারি ড্রেন এবং সিপিইউ ব্যবহারের কারণ হতে পারে।

ডকুমেন্টেশনে একটি দরকারী পৃষ্ঠাও রয়েছে যা একটি ডিভাইসকে জাগ্রত রাখার বিভিন্ন পদ্ধতির বর্ণনা দেয় এবং আপনি যখন এটি ব্যবহার করতে পছন্দ করেন। যদি "ডিভাইসটিকে ঘুমাতে যেতে না দেয়" কেবলমাত্র স্ক্রিনকে বোঝায় (এবং সিপিইউকে সচল না রাখে) তবে একটি ওয়েক লক সম্ভবত আপনার প্রয়োজনের চেয়ে বেশি।

এই পদ্ধতিটি ব্যবহার করার জন্য আপনার ম্যানিফেস্টে WAKE_LOCK অনুমতি সেট রয়েছে তাও আপনার নিশ্চিত হওয়া দরকার ।


21
আপনার এখন আর এটি ব্যবহার করা উচিত নয় যেহেতু এই পদ্ধতিটি এখন হ্রাস করা হয়েছে। অন্য একটি উত্তর দেখুন।
DuKes0mE

4
ওয়েলক্লকগুলি ব্যবহারের এখনও কিছু কারণ রয়েছে, যেমন ডিভাইসটি যদি কোনও নির্দিষ্ট অ্যাপ্লিকেশনটিতে উত্সর্গীকৃত হয় এবং ছোট করা হলেও চালানো দরকার।
মুজ

2
PowerManager.PARTIAL_WAKE_LOCK অবমূল্যায়ন করা হয়নি এবং আমি মনে করি এটি সবচেয়ে কার্যকর পদ্ধতি। এটি ব্যবহারকারীকে পাওয়ার বোতাম টিপতে দেয় তবে ব্যবহারকারী কল রিলিজ না হওয়া পর্যন্ত সিপিইউ চালু থাকবে ();
মনসুর ফাহাদ

অফিসিয়াল ডকুমেন্টেশন বলছে "ডিভাইসটি ঘুমানোর আগে কিছু কাজ শেষ করার জন্য আপনার যদি সিপিইউ চালিয়ে রাখা প্রয়োজন, আপনি উইক লকস নামে একটি পাওয়ার ম্যানেজার সিস্টেম পরিষেবা বৈশিষ্ট্য ব্যবহার করতে পারেন।"
জোয়াকুইন ইয়ারচুক

এটি দুর্দান্ত উপায়, তবে এটি অবমাননিত। : দয়া করে এই উত্তর চেক stackoverflow.com/a/22447615/5327912
পার্থ Anjaria

240

আপনি যদি স্লিপ মোডকে কোনও নির্দিষ্টটিতে আটকাতে চান তবে Viewকেবল এটিতে কল setKeepScreenOn(true)করুন Viewবা keepScreenOnসম্পত্তিটি সেট করুন true। এটি স্ক্রিনে থাকা অবস্থায় পর্দাটি বন্ধ হতে বাধা দেবে View। এই জন্য কোন বিশেষ অনুমতি প্রয়োজন।


18
এছাড়াও এটি অ্যাপ্লিকেশনের লাইফ স্প্যানের বাইরে ফোনটি জাগ্রত রাখতে বাধ্য করবে না। আপনি ওয়েকলক দিয়ে সেই সমস্যায় পড়তে পারেন।
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

2
হ্যাঁ, বেশিরভাগ ক্ষেত্রেই এটি সর্বোত্তম পন্থা।
এডওয়ার্ড ফাল

8
এটি নির্বাচিত উত্তর হওয়া উচিত। সরল, পরিষ্কার এবং অ্যান্ড্রয়েডের মতো। ধন্যবাদ.
লাইয়ার ইলুজ

2
"অ্যান্ড্রয়েড ব্যবহার: কিপস্ক্রিনঅন =" সত্য "FLAG_KEEP_SCREEN_ON ব্যবহার করার সমতুল্য your আপনার অ্যাপ্লিকেশনটির জন্য আপনি যে কোনও পদ্ধতিকেই সেরা ব্যবহার করতে পারেন your আপনার ক্রিয়াকলাপে কর্মসূচীরূপে পতাকাটি সেট করার সুবিধা হ'ল এটি আপনাকে প্রোগ্রামটিকে পরে পতাকা সাফ করার বিকল্প দেয় এবং এর মাধ্যমে স্ক্রিনটি বন্ধ করতে দেওয়া হচ্ছে "- developer.android.com
আন্তোনিও

মনে রাখবেন যে দৃশ্যমান setKeepScreenOn(true)হলেই কার্যকর হবে View
জেফ টি।

121

আমি আর একটি কার্যকরী সমাধান পেয়েছি: অনক্রিট ইভেন্টের অধীনে আপনার অ্যাপটিতে নিম্নলিখিত লাইনটি যুক্ত করুন।

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

আমার নমুনা কর্ডোভা প্রকল্পটি এর মতো দেখাচ্ছে:

package com.apps.demo;
import android.os.Bundle;
import android.view.WindowManager;
import org.apache.cordova.*;

public class ScanManActivity extends DroidGap {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        super.loadUrl("http://stackoverflow.com");
    }
}

এর পরে, আমার অ্যাপ্লিকেশনটি খোলার সময় ঘুমাতে যাবে না। অ্যাওয়ারের জন্য ধন্যবাদ xSus এ যায়।


এটি আমার মতে সেরা বিকল্প ছিল ... +1
অমিত

এটি উইটেক উত্তরের মতো একই কাজ করে, পার্থক্য কেবলমাত্র এটিই যে আপনি এটি "
.xML

অনুমতি কেমন? এটির কি অনুমতি দরকার?
মেহেদী খাদেমলু

@ মেহেদী খাদেমলু এর অনুমতির দরকার নেই।
ওয়াসাম এল মাহডি


17

নীচের মত ক্রিয়াকলাপ উইন্ডোতে পতাকা সেট করুন

@Override public void onResume() {
 super.onResume();
 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}

@Override public void onPause() {
 super.onPause();
 getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}

6

রুট শেল (যেমন অ্যাডবি শেল) থেকে আপনি লক করতে পারেন:

echo mylockname >/sys/power/wake_lock    

যার পরে আপনি না করা পর্যন্ত ডিভাইসটি জাগ্রত থাকবে:

echo mylockname >/sys/power/wake_unlock    

'মাইলোকনাম' এর জন্য একই স্ট্রিং সহ।

নোট করুন যে এটি স্ক্রিনটি কালো হতে বাধা দেবে না, তবে এটি সিপিইউকে ঘুমোতে আটকাবে।

নোট করুন যে / sys / শক্তি / জাগরণ_লোক ব্যবহারকারী রেডিও (1001) এবং গ্রুপ সিস্টেম (1000), এবং অবশ্যই, মূলের জন্য পঠনযোগ্য।

একটি তথ্যসূত্র এখানে: http://lwn.net/Articles/479841/


3

@eldarerathis যা বলেছে তা সব দিক থেকে সঠিক, জাগ্রত লকটি ডিভাইসটিকে ঘুমাতে না রাখার সঠিক উপায়।

আপনার অ্যাপ্লিকেশনটি কী করতে হবে তা আমি জানি না তবে আপনি কীভাবে আপনার অ্যাপ্লিকেশনটি আর্কিটেক্টের বিষয়ে চিন্তা করেন তা আপনার পক্ষে গুরুত্বপূর্ণ , যাতে আপনার প্রয়োজনের জন্য ফোনটি জাগ্রত রাখতে বাধ্য করা না হয়, বা ব্যাটারির জীবন চরমভাবে ক্ষতিগ্রস্থ হয়।

ইভেন্টগুলিতে আগুন লাগাতে কীভাবে ব্যবহার করা যায় এবং ফোনটি জাগ্রত করা এবং আপনার যা করা দরকার তা সম্পাদন করে আবার ঘুমাতে যেতে কীভাবে তার সত্যিকারের উদাহরণটির প্রতি আমি আপনাকে নির্দেশ করব AlarmManager: অ্যালার্ম ম্যানেজার (উত্স: কমন্সওয়্যার ডট কম)


ব্যাটারি নিষ্কাশন করার জন্য নির্দিষ্টভাবে এবং উদ্দেশ্যমূলকভাবে ইউটিলিটি অ্যাপস রয়েছে। আমার এক সময় দরকার ছিল। মূলত এটি ওয়েলক্লকগুলি অর্জন করবে, পাগলের মতো কম্পন করবে, ফ্ল্যাশলাইট চালু করবে, উজ্জ্বলতা বাড়িয়ে দেবে ইত্যাদি etc. তাই হ্যাঁ, এমন অ্যাপস রয়েছে যা এটি ব্যবহার করে। তবে এটি বিষয়
ছাড়াই

0

আপনি যদি জামারিন ব্যবহারকারী হন তবে এটিই সমাধান:

   protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle); //always call superclass first

        this.Window.AddFlags(WindowManagerFlags.KeepScreenOn);

        LoadApplication(new App());
    }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.