2015-07-31 7 views
13

मैं एडीबी आदेशों को प्रोग्राम केके दौरान त्रुटि ADB आदेश को क्रियान्वित करने को प्रोग्राम के

यहाँ निष्पादित करने के लिए कोशिश कर रहा हूँ मेरी कोड है:

File f = new File(Environment.getExternalStorageDirectory(), "screen" + System.currentTimeMillis() + ".png"); 

new ExecuteCommand(MainActivity.this).execute("adb shell screencap -p " 
     + Environment.getExternalStorageDirectory().getPath() + 
     "/" + "screen" + System.currentTimeMillis() + ".png"); 

ExecuteCommand कक्षा: लॉग में

public class ExecuteCommand extends AsyncTask<String, String, String> { 

    Context mContext=null; 
    public ExecuteCommand(Context _ctx) 
    { 
     mContext =_ctx; 
    } 

    ProgressDialog progressdailog; 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     progressdailog = ProgressDialog.show(mContext, 
       "Executing", "Please Wait"); 
    } 
    @Override 
    protected String doInBackground(String... params) { 
     Process p; 
     StringBuffer output = new StringBuffer(); 
     try { 
      p = Runtime.getRuntime().exec(params[0]); 
      BufferedReader reader = new BufferedReader(
        new InputStreamReader(p.getInputStream())); 
      String line = ""; 
      while ((line = reader.readLine()) != null) { 
       output.append(line + "\n"); 
       p.waitFor(); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
     String response = output.toString(); 
     return response; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     super.onPostExecute(result); 
     progressdailog.dismiss(); 
     Log.e("Output", result); 
    } 
} 

समस्या:

07-31 15: 26: 31.832 18 716-18716/com.example ई/आउटपुट: 'टीसीपी: 5038' * डिमन नहीं चल रहा है। इसे पोर्ट 5038 *

मैं स्क्रीनशॉट नहीं ले पा रहा हूं, लेकिन अगर मैं कमांड प्रॉम्प्ट पर एक ही कमांड चलाता हूं तो यह ठीक काम कर रहा है।

लेकिन अगर मैं निष्पादित

new ExecuteCommand(MainActivity.this).execute("ls"); 

इस ठीक काम करता है। कमांड में समस्या कहां है?

+0

[exec() एडीबी डिमन क्यों शुरू करता है?] (Https://stackoverflow.com/a/34112381/3290339) – Onik

उत्तर

5

adb shell का उपयोग तब किया जाता है जब आप अपने पीसी में डिवाइस तक पहुंचने का प्रयास कर रहे हैं। लेकिन जब आप डिवाइस पर ही कमांड को क्रियान्वित कर रहे हैं, तो आप की जरूरत नहीं है adb shell

यह साफ हो जाएगा:

new ExecuteCommand(MainActivity.this).execute("screencap -p " + f); 
+0

यह काम नहीं कर रहा है। अब आउटपुट है [07-31 15: 38: 11.494 1039: 0x502 डी/KeyguardViewMediator] सेट पर हस्ताक्षर किए गए झूठे – theLazyFinder

+0

सेट पर आधारित झूठी समस्या समस्या नहीं है। जब आप adb shell कमांड को हटाते थे तो यह एकमात्र आउटपुट था? –

+0

KeyguardViewMediator से लॉग इस पर असर नहीं पड़ेगा। कहीं और देखो। स्क्रीन रिकॉर्ड भी keyguard पर रिकॉर्ड कर सकते हैं, तो दृश्यमान या कोई फर्क नहीं पड़ता है। – JoxTraex

2

मैं वहाँ लगता है कि अनुमति के साथ कुछ समस्या है।

इसे करने के लिए नए MediaProjection एपिस का उपयोग करें।

स्रोत कोड के लिए https://github.com/googlesamples/android-ScreenCapture देखें।

+0

धन्यवाद !!! लेकिन मुझे कमांड लाइन से कुछ उपयोग करने की ज़रूरत है क्योंकि मुझे अन्य एडीबी कमांड का भी उपयोग करना है !! – theLazyFinder

4

इस वेबसाइट पर और android-developers दोनों पर इस पर कई समान चर्चाएं हुई हैं, लेकिन टीएल: डीआर यह है कि आप वास्तव में डिवाइस से सभी शेल कमांड नहीं चला सकते हैं। उनमें से अधिकतर अनुमतियों की आवश्यकता होती है जो केवल सिस्टम ऐप्स को दी जाती हैं। pm शैल कमांड का उपयोग उदाहरण के लिए विभिन्न पैकेज अनुमतियों की आवश्यकता है, जिनमें से अधिकांश केवल सिस्टम हैं। आप here अनुमतियों की सूची देख सकते हैं।

आपको या तो डिवाइस को रूट करना होगा, या आप जो चाहते हैं उसे प्राप्त करने के वैकल्पिक तरीके की तलाश करेंगे।

+0

मेरे पास रूट डिवाइस है – theLazyFinder

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