2010-08-27 18 views
12

मैं एंड्रॉइड के लिए कुछ प्रकार के रिमोट सहायता टूल (जैसे वीएनसी) को कार्यान्वित करना चाहता हूं। डिवाइस पर प्रोग्रामेटिक रूप से स्क्रीन कैप्चर करने की संभावना है?मोबाइल डिवाइस पर प्रोग्रामेटिक स्क्रीनकैप्चर

उत्तर

17

कुछ ऐसा है जैसे आप के लिए काम कर सकते हैं:

View v = view.getRootView(); 
v.setDrawingCacheEnabled(true); 
Bitmap b = v.getDrawingCache(); 
+2

धन्यवाद, यह मैं अभी क्या जरूरत है!मुझे एक ही समस्या थी, लेकिन मैं केवल अपने ऐप का बिटमैप चाहता था, ओएस यूआई आदि नहीं –

12

android-developers पर इस की एक लंबी चर्चा नहीं है, लेकिन संक्षिप्त उत्तर है: आप नहीं प्रोग्रामेटिक पर एक Android डिवाइस की स्क्रीन का एक स्क्रीनशॉट ले जा सकते हैं पल, जब तक

  1. आपको लगता है कि फोन पर रूट पहुँच है, या
  2. आपका आवेदन एक सिस्टम ऐप्लिकेशन
है

एंड्रॉइड मैनिफेस्ट अनुमति READ_FRAME_BUFFER मौजूद है (एपीआई दस्तावेज़ here देखें), लेकिन वर्तमान में केवल सिस्टम अनुप्रयोगों द्वारा उपयोग किया जा सकता है। इसके लिए कई कारण हैं, एक यह है कि यह एक सुरक्षा जोखिम है। यदि कोई पृष्ठभूमि किसी भी समय फोन की स्क्रीन का स्क्रीनशॉट ले सकती है, तो लोग अन्य निजी सूचनाओं के साथ उपयोगकर्ता के पासवर्ड को छीनने के लिए ओसीआर तकनीकों का उपयोग कर सकते हैं।

तो नहीं, रूट के बिना इस समय एक वीएनसी आवेदन संभव नहीं है। अपने कंप्यूटर से एक स्क्रीनशॉट लेने के लिए (जबकि फोन यूएसबी के माध्यम से प्लग किया गया है) आप DDMS का उपयोग कर सकते हैं।

+0

आपने जो कहा है उसके आधार पर, ऐसा लगता है कि गैर-स्टॉक वसूली के माध्यम से एक सिस्टम एप्लिकेशन इंस्टॉल किया जा सकता है और जरूरी नहीं कि रोम की आवश्यकता हो खुद को जड़ें। मैंने इस उत्तर को पोस्ट करने के बाद भी 1.75 साल के किसी भी वीएनसी सिस्टम अनुप्रयोगों के बारे में नहीं सुना है। वहाँ बहुत से कस्टम रोम उपयोगकर्ता हैं और ऐसा लगता है कि वहां एक शून्य है जो किसी के लिए एक अच्छा वीएनसी ऐप के साथ आने का इंतजार कर रहा है। –

+2

बिंदु 2 के संबंध में: आपको केवल सिस्टम सिस्टम (यानी सिस्टम फ़ोल्डर में) से अधिक होना है, आपको ओएस कुंजी द्वारा हस्ताक्षरित होना होगा, जो कि अधिक प्रतिबंधित है। "हस्ताक्षरऑरसिस्टम" और "हस्ताक्षर" होने की अनुमति के बीच यह अंतर है। –

7

आप निम्न पुस्तकालय की कोशिश कर सकते हैं: http://code.google.com/p/android-screenshot-library/ एंड्रॉयड स्क्रीनशॉट लाइब्रेरी (एएसएल) प्रोग्राम के रूप में रूट पहुँच विशेषाधिकार होने की आवश्यकता के बिना Android उपकरणों से स्क्रीनशॉट पर कब्जा करने के लिए सक्षम बनाता है। इसके बजाए, एएसएल पृष्ठभूमि में चल रही एक मूल सेवा का उपयोग करता है, जो प्रति डिवाइस बूट के बाद एंड्रॉइड डीबग ब्रिज (एडीबी) के माध्यम से शुरू होता है।

+0

आपका उत्तर मेरे लिए बहुत उपयोगी है, लेकिन जब मैं इस पुस्तकालय का उपयोग करता हूं तो यह मुझे एक टोस्ट दिखा रहा है "मूल सेवा नहीं मिली"। यदि आपको ऐसा कोई समस्या आती है तो कृपया मेरी मदद करें। धन्यवाद –

+2

"मेरे लिए मूल सेवा नहीं मिली" .... मैं यहाँ क्या खो रहा हूं? –

3

मुझे लगता है कि स्क्रीन कैप्चर के लिए adb कमांड का उपयोग करके किटकैट में यह संभव है। पर आप वीडियो

adb shell screenrecord /sdcard/demo.mp4 

के रूप में रिकॉर्ड स्क्रीन करने के लिए इस आदेश का उपयोग कर सकते हैं आप अधिक विवरण here

पा सकते हैं आप अपने अनुप्रयोग से ADB आदेश पर अमल कर सकते हैं। चेक जवाब here

+1

नहीं। निष्पादन के बाद: getRuntime()। Exec() विधि पर 'स्क्रीनरेकॉर्ड --verbose --time-limit 5 /sdcard/recvid.mp4' ... प्रक्रिया चलती है, हालांकि मुझे त्रुटि मिलती है: "अनुमति अस्वीकार: प्रसारण उपयोगकर्ता -1 के रूप में चलाने के लिए कहा जाता है लेकिन उपयोगकर्ता 0 से कॉल कर रहा है; इसके लिए android.permission.INTERACt_ACROSS_USERS_FULL की आवश्यकता है .. "हालांकि मैं 'स्क्रीनरेकॉर्ड --help' चलाने में सक्षम हूं बस ठीक है! – giannileuani

0

VNC प्रकार दूरस्थ सहने के लिए मौजूद है "कुछ" android उपकरणों (मुख्य रूप से सैमसंग):
TeamViewer QuickSupport
https://play.google.com/store/apps/details?id=com.teamviewer.quicksupport.market
डॉस किसी को भी कैसे कि उपकरण स्क्रीन कैप्चरिंग हो जाता है जानता है , और यह केवल उपकरणों के सीमित सेट का समर्थन क्यों करता है?

1

.. .. onClick में रख

Bitmap bitmap = takeScreenshot(); 
saveBitmap(bitmap); 

और funtcion लिखने

public Bitmap takeScreenshot() { 
    View rootView = findViewById(android.R.id.content).getRootView(); 
    rootView.setDrawingCacheEnabled(true); 
    return rootView.getDrawingCache(); 
} 

public void saveBitmap(Bitmap bitmap) { 
    File imagePath = new File(Environment.getExternalStorageDirectory() + "/screenshot.png"); 
    FileOutputStream fos; 
    try { 
     fos = new FileOutputStream(imagePath); 
     bitmap.compress(CompressFormat.PNG, 100, fos); 
     fos.flush(); 
     fos.close(); 
    } catch (FileNotFoundException e) { 
     Log.e("GREC", e.getMessage(), e); 
    } catch (IOException e) { 
     Log.e("GREC", e.getMessage(), e); 
    } 
} 
संबंधित मुद्दे