Android में कियोस्क मोड


114

मैं मूल्यांकन करने की प्रक्रिया में हूँ कि क्या और कैसे एक CF .NET एंटरप्राइज़ एप्लिकेशन को Android उपकरणों पर चलाने के लिए पोर्ट किया जा सकता है। विंडोज मोबाइल फोन पर एप्लिकेशन कियोस्क मोड में चलाए जाते हैं जहां बूटिंग के बाद फुलस्क्रीन-मोड में एप्लिकेशन ऑटोस्टार्ट होता है और उपयोगकर्ताओं के साथ गलती से या स्वेच्छा से फोन के किसी अन्य हिस्से तक पहुंचने में असमर्थ होता है।

क्या बूटिंग के बाद एंड्रॉइड पर केवल एक एप्लिकेशन ऑटोस्टार्ट होना संभव है और उपयोगकर्ताओं को गलती से (या स्वेच्छा से) एंड्रॉइड डिवाइस के किसी अन्य हिस्से तक पहुंचने से रोक सकता है?


क्या आप उर समस्या का समाधान करते हैं?
मन्ना-अल्लाह सामी

3
हाँ यह संभव है। मैंने इस बारे में एक (बहुत) लंबा ब्लॉग पोस्ट बनाया: andreas-schrade.de/2015/02/16/…
funcoder

मैंने इस बारे में (आंशिक रूप से) लॉलीपॉप का उपयोग करके एक ब्लॉग पोस्ट भी बनाया है - यह बूट रिसीवर के हिस्से को बाहर निकालता है: हालांकि सुरेशजोशी.com
mobile

मैंने अलग-अलग एकल-उपयोग वाले उपकरणों को बनाने के लिए अलग-अलग तरीकों पर यहां एक समान प्रश्न का उत्तर दिया: stackoverflow.com/a/43644803/2888763
ट्रेवर हैलवरसन

जवाबों:


29

आप android.intent.action.BOOT_COMPLETEDब्रॉडकास्टसीवर में इरादे को सुनकर बूट पर एप्लिकेशन को ऑटोस्टार्ट कर सकते हैं और वहां से अपनी गतिविधि शुरू कर सकते हैं। गतिविधि में आप खुद को नए डिफ़ॉल्ट होमस्क्रीन [1] के रूप में पंजीकृत कर सकते हैं और चाबियाँ संभाल सकते हैं।

मुझे लगता है कि कुछ ऐसे उदाहरण हैं जिन्हें आप फ्रेमवर्क को संशोधित किए बिना नहीं संभाल सकते हैं (जैसे कि वर्तमान में सक्रिय एप्लिकेशन दिखाने के लिए होम पर लॉन्गप्रेस) - मुझे हालांकि गलत भी किया जा सकता है।

लेकिन एक प्रोटोटाइप के लिए जो पर्याप्त हो सकता है।

मज़े से छेड़छाड़ करो!

[1]:

<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>

1
जब आप लॉन्चर में जाते हैं तो बैक बटन दबाते ही आपको पहली एसिटिविटिटी के ऑनबैकप्राइड को भी ओवरराइड करना होगा
ademar111190

कोड के माध्यम से अक्षम सिस्टम डायलॉग एन नोटिफिकेशन बार को कैसे प्राप्त करें
ज्ञानम आर

1
@ ज्ञानमआर: मेरे जवाब की जांच करें: stackoverflow.com/questions/11958034/hide-tablet-system-bar
Basher51

@ रिंकलकुमार ऐप को फुल-स्क्रीन मोड में चलाएं।
जॉन ६१५

17

कियोस्क को सक्षम करने के लिए आप इसे (मेन्यू एक्सेस को सीमित कर सकते हैं, एप्लिकेशन एडिशन को सीमित कर सकते हैं)। http://code.google.com/p/android-launcher-plus/


7
क्या मुझे पता है कि यह क्यों ठुकरा दिया गया था? मैंने अपना पूर्ण भाग लिखा, वर्तमान में Android लॉन्चर प्लस के शीर्ष पर संपादन और विकास करके Android कियोस्क एप्लिकेशन को तैनात किया है।
रॉट डे

1
किस मामले में, मैं आपके उत्तर और आपकी टिप्पणी दोनों को
बढ़ा देता हूं

@rbot आपने ऐसा कैसे किया? मैं उम्र के लिए एक कियोस्क एप्लिकेशन बनाने की कोशिश कर रहा हूं, और मैंने यह सुनिश्चित करने के लिए लगभग सभी अन्य चीजों को हल किया है कि नोटिफिकेशन ट्रे नहीं खुलती है।
वाका ०२

1
@ Wakka02 मुझे लगता है कि मैं onwindowchanged या कुछ इसी तरह की घटना की तलाश कर रहा था (जो संभवतः अधिसूचना ट्रे खोलने का संकेत दे सकता है) और ट्रे को बंद कर सकता है। मैंने इसे बहुत पहले किया था, इसलिए बारीकियों को याद नहीं है।
1934

@ Wakka02: मेरे जवाब की जाँच करें: stackoverflow.com/questions/11958034/hide-tablet-system-bar
Basher51

17

नए Android L प्रीव्यू में, Google ने टास्क लॉकिंग की घोषणा की है , जो ठीक यही करता है। यह जड़ की जरूरत है, लेकिन लगता है।

L डेवलपर प्रीव्यू एक नया टास्क लॉकिंग एपीआई पेश करता है जो आपको उपयोगकर्ताओं को आपके ऐप को छोड़ने या सूचनाओं से बाधित होने से अस्थायी रूप से प्रतिबंधित करता है। इसका उपयोग किया जा सकता है, उदाहरण के लिए, यदि आप एंड्रॉइड पर उच्च दांव मूल्यांकन आवश्यकताओं का समर्थन करने के लिए एक शिक्षा ऐप विकसित कर रहे हैं। एक बार जब आपका ऐप इस मोड को सक्रिय कर देता है, तो उपयोगकर्ता तब तक सूचनाएं नहीं देख पाएंगे, जब तक कि आपका ऐप मोड से बाहर नहीं निकल जाता है, तब तक वे अन्य एप्लिकेशन तक नहीं पहुंच सकते हैं या होम स्क्रीन पर नहीं लौट सकते हैं।

अनधिकृत उपयोग को रोकने के लिए, केवल अधिकृत ऐप्स ही कार्य लॉकिंग को सक्रिय कर सकते हैं। इसके अलावा, कार्य लॉकिंग प्राधिकरण को android.app.admin.DevicePolicyManager.setLockTaskComponents()विधि के माध्यम से एक विशेष रूप से कॉन्फ़िगर डिवाइस स्वामी ऐप द्वारा दिया जाना चाहिए ।

डिवाइस स्वामी सेट करने के लिए, इन चरणों का पालन करें:

  • userdebugअपनी विकास मशीन पर Android बिल्ड चलाने वाला उपकरण संलग्न करें।
  • अपना डिवाइस ओनर ऐप इंस्टॉल करें।
  • एक device_owner.xmlफ़ाइल बनाएं और इसे /data/systemडिवाइस पर निर्देशिका में सहेजें ।
$ adb root
$ adb shell stop
$ rm /tmp/device_owner.xml
$ echo "<?xml version='1.0' encoding='utf-8' standalone='yes' ?>" >> /tmp/device_owner.xml
$ echo "&device-owner package=\"<your_device_owner_package>\" name=\"*<your_organization_name>\" />" >> /tmp/device_owner.xml
$ adb push /tmp/device_owner.xml /data/system/device_owner.xml
$ adb reboot

अपने ऐप में कार्य लॉकिंग एपीआई का उपयोग करने से पहले, सत्यापित करें कि आपकी गतिविधि DevicePolicyManager.isLockTaskPermitted () को कॉल करके अधिकृत है।

कार्य लॉकिंग को सक्रिय करने के लिए, android.app.Activity.startLockTask() अपनी अधिकृत गतिविधि से कॉल करें ।

जब कार्य लॉकिंग सक्रिय होता है, तो निम्न व्यवहार प्रभावी होता है:

  • स्थिति पट्टी रिक्त है, और उपयोगकर्ता सूचनाएँ और स्थिति जानकारी छिपी हुई है।
  • होम और हाल के ऐप्स बटन छिपे हुए हैं।
  • अन्य एप्लिकेशन नई गतिविधियों को लॉन्च नहीं कर सकते हैं।
  • वर्तमान ऐप नई गतिविधियां शुरू कर सकता है, जब तक ऐसा करने से नए कार्य नहीं बनते।
  • अधिकृत गतिविधि कॉल करने तक उपयोगकर्ता आपके ऐप पर लॉक रहता है Activity.stopLockTask()

3
डेवलपर .android.com/guide/topics/admin/device-admin.html - एक उपकरण व्यवस्थापक ऐप को परिनियोजित करने पर।
तोशे

2
यहाँ पूर्ण सेटअप के साथ टास्क लॉक के बारे में मेरा लेख है algoritm pvolan.blogspot.ru/2017/01/android-50-kiosk-mode-aka-super.html
PVoLan

9

थोड़ी देर के लिए इस खोज के बाद मैं एक अच्छा समाधान के साथ आया हूँ। यह केवल रूट किए गए उपकरणों पर काम करता है, लेकिन मुझे लगता है कि अगर यह सिर्फ इस एक ऐप के लिए है तो इसे रूट करने में कोई समस्या नहीं होनी चाहिए।

अन्य तरीके से http://thebitplague.wordpress.com/2013/04/05/kiosk-mode-on-the-nexus-7/ भी देखें।


5

बूट पर अपना ऐप शुरू करना

इसे पूरा करने का सबसे अच्छा तरीका आपके ऐप को लॉन्चर के रूप में सेट करना है

<activity ...
  android:launchMode="singleInstance"
  android:windowActionBar="false">
    <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>
</activity>

अपने ऐप को लॉक करना

सबसे विश्वसनीय तरीका लॉलीपॉप या अधिक से अधिक डिवाइस का उपयोग करना और उपयोग करना है

startLockTask

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

अपने ऐप को पंजीकृत करने में सक्षम होने के लिए आपको पहले एक DeviceAdminReceiver घटक सेट करना होगा:

package com.example.myapp;

public class MyDeviceAdminReceiver extends android.app.admin.DeviceAdminReceiver {
    @Override
    public void onEnabled(Context context, Intent intent) {
        Toast.makeText(context, "Device admin permission received", Toast.LENGTH_SHORT).show();
    }

    @Override
    public CharSequence onDisableRequested(Context context, Intent intent) {
        return "are you sure?";
    }

    @Override
    public void onDisabled(Context context, Intent intent) {
        Toast.makeText(context, "Device admin permission revoked", Toast.LENGTH_SHORT).show();
    }


    @Override
    public void onLockTaskModeExiting(Context context, Intent intent) {
        // here you must re-lock your app. make your activity know of this event and make it call startLockTask again!
    }
}

एक बार आपके पास एक अप्रमाणित उपकरण होने के बाद आप adb से निम्नलिखित कमांड लॉन्च कर सकते हैं ( कोई रूट आवश्यक नहीं )

adb shell dpm set-device-owner com.example.myapp/.MyDeviceAdminReceiver

एंड्रॉइड से बचने के लिए उपयोगकर्ता को अपने ऐप को पिन करने के लिए कहने के लिए आपको setLockTaskPackages को कॉल करना होगा

आखिरकार!

@Override
public void onResume(){
    super.onResume();
    DevicePolicyManager mDevicePolicyManager = (DevicePolicyManager) getSystemService(
            Context.DEVICE_POLICY_SERVICE);
    ComponentName mAdminComponentName = new ComponentName(getApplicationContext(), MyDeviceAdminReceiver.class);
    mDevicePolicyManager.setLockTaskPackages(mAdminComponentName, new String[]{getPackageName()});
    startLockTask();
}
@Override
public void finish(){
    stopLockTask();
    super.finish();
}

5

Google ने हाल ही में एंड्रॉइड मैनेजमेंट एपीआई जारी किया है जो एंड्रॉइड 5.1 या उससे ऊपर के किसी भी एंड्रॉइड डिवाइस के लिए आसानी से कियोस्क मोड सेट करने की अनुमति देता है, और विभिन्न अन्य नीतियों को भी सेट करने के लिए।


बहुत बढ़िया मिल गया। यहाँ कियॉस्क मोड जानकारी का सीधा लिंक दिया गया है: Developers.google.com/android/management/policies/…
रॉबर्ट लिबरेटोर

3

एंड्रॉइड डेवलपर के सिंगल-पर्पस डिवाइसेस पेज को सेट करें इस बात का वर्णन किया गया है जिससे आप आसानी से वहां से और चीजें जान सकते हैं।

अब एंड्रॉइड 6.0 मार्शमैलो और बाद के उपकरणों को कॉर्पोरेट के स्वामित्व वाले, एकल-उपयोग (COSU) उपकरणों के रूप में कॉन्फ़िगर करना आसान है।


2

इस मंच पोस्ट में एक और संभव तकनीक मिली । उस पोस्ट को उद्धृत करना:

http://www.basic4ppc.com/forum/basic4android-getting-started-tutorials/10839-android-kiosk-mode-tutorial.html

निम्नलिखित विधियों का उपयोग करके आप एक ऐसा एप्लिकेशन बना सकते हैं जो "नियमित" उपयोगकर्ताओं को आपके एप्लिकेशन के अलावा किसी अन्य चीज़ से खेलने से रोकेगा।

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

जब गतिविधि को रोक दिया जाता है तो यह सेवा को एक सेकंड में शुरू करने के लिए शेड्यूल करता है: कोड:

Sub Activity_Pause (UserClosed As Boolean)
    If kiosk Then StartServiceAt(KioskService, DateTime.Now + 1 * DateTime.TicksPerSecond, false)    
End Sub

यदि उपयोगकर्ता होम स्क्रीन पर दबाता है, तो होम स्क्रीन कई सेकंड के लिए दिखाई देगी। हालाँकि आपका एप्लिकेशन कुछ सेकंड के बाद मोर्चे पर वापस आ जाएगा और उपयोगकर्ता किसी अन्य एप्लिकेशन के साथ बातचीत नहीं कर पाएगा या सेटिंग्स नहीं बदल पाएगा।

सेवा को अग्रभूमि सेवा के रूप में सेट किया गया है। यह एंड्रॉइड को हमारी सेवा को मारने से रोकता है। कियोस्क मोड को निष्क्रिय करने के लिए स्टॉप बटन पर दबाएं।

प्रतीत होता है कि एक उदाहरण कियोस्क-मोड कोड ज़िप फ़ाइल डाउनलोड के लिए भी उपलब्ध है।


2

Xposed ढांचा ऐसा कर सकता है। इसकी जड़ चाहिए और संभावना है कि यह हर और सभी प्लेटफार्मों पर काम नहीं करेगा। के लिए देखो अक्षम () कक्षा में विधि android.app.StatusBarManager

यहाँ Android स्रोत कोड में

अपने स्वयं के मॉड्यूल को लिखने के तरीके के बारे में यहां देखें: Xposed विकास ट्यूटोरियल

यह पहली नज़र में आपके विचार से बहुत आसान है। शुभ लाभ!


कोई भी Xposed मॉड्यूल जो आपको लगता है कि यह करता है?
फायरलॉर्ड

0

BOOT रिसीवर और इस उत्तर के साथ अपना एप्लिकेशन सेट करने के साथ स्टेटस बार के विस्तार को रोकने के लिए , यह समाधान 4.4 और इसके बाद के संस्करण में एक पूर्ण कियोस्क ऐप के रूप में काम करता है:

अपने ऑनक्रीट में रखें ():

    final View view = (View) findViewById(android.R.id.content);
    if (view != null) {
        //"hides" back, home and return button on screen. 
        view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE |
                                   View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
                                   View.SYSTEM_UI_FLAG_IMMERSIVE |
                                   View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY |
                                   View.SYSTEM_UI_FLAG_FULLSCREEN);
        view.setOnSystemUiVisibilityChangeListener
                (new View.OnSystemUiVisibilityChangeListener() {
                    @Override
                    public void onSystemUiVisibilityChange(int visibility) {
                        // Note that system bars will only be "visible" if none of the
                        // LOW_PROFILE, HIDE_NAVIGATION, or FULLSCREEN flags are set.
                        if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
                            view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE |
                                    View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
                                    View.SYSTEM_UI_FLAG_IMMERSIVE |
                                    View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY |
                                    View.SYSTEM_UI_FLAG_FULLSCREEN);
                        }
                    }
                });
    }

यह बैक बटन, ऐप्स और होम बटन को पूरी तरह से छिपा देगा।


अधिसूचना बार के बारे में क्या?
एलशान
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.