2014-01-22 3 views
0

UPDATE НИЖЕonClick takeScreenShot вызывает приостановку

Приложение продолжает приостанавливаться. Я пытаюсь получить скриншот с нажатием кнопки. Он приостанавливается, когда я нажимаю кнопку. Это то, что я получаю в перспективе отладки:

MainActivity$1.onClick(View) line: 108 
Button(View).performClick() line: 4438 
View$PerformClick.run() line: 18422 
Handler.handleCallback(Message) line: 733 
ViewRootImpl$ViewRootHandler(Handler).dispatchMessage(Message) line: 95 
Looper.loop() line: 136 
ActivityThread.main(String[]) line: 5017  
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]  
Method.invoke(Object, Object...) line: 515 
ZygoteInit$MethodAndArgsCaller.run() line: 779 
ZygoteInit.main(String[]) line: 595 
NativeStart.main(String[]) line: not available [native method] 

Я использую OnClick, чтобы сделать снимок экрана, как показано здесь:

  public void onClick(View view) { 




      Activity MainActivity = null; 
    //Line 108 View view1 = MainActivity.getWindow().getDecorView(); 
      view1.setDrawingCacheEnabled(true); 
      view1.buildDrawingCache(); 
      Bitmap b1 = view1.getDrawingCache(); 
      Rect frame = new Rect(); 
      MainActivity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame); 
      int statusBarHeight = frame.top; 
      int width = MainActivity.getWindowManager().getDefaultDisplay().getWidth(); 
      int height = MainActivity.getWindowManager().getDefaultDisplay().getHeight(); 

      Bitmap b = Bitmap.createBitmap(b1, 0, statusBarHeight, width, height - statusBarHeight); 
      view1.destroyDrawingCache(); 

      FileOutputStream fos = null; 
      try 
      { 
       fos = new FileOutputStream(strFileName); 
       if (null != fos) 
       { 
        b.compress(Bitmap.CompressFormat.PNG, 90, fos); 
        fos.flush(); 
        fos.close(); 
       } 
      } 
      catch (FileNotFoundException e) 
      { 
       e.printStackTrace(); 
      } 
      catch (IOException e) 
      { 
       e.printStackTrace(); 
      } 



     } 

------------- ----------------------ОБНОВИТЬ--------------------------- ---------------

Я взял метод из onClick(). Я создал вторую деятельность под названием ScreenShot.java, как вы можете увидеть здесь:

import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 

import android.app.Activity; 
import android.graphics.Bitmap; 
import android.graphics.Rect; 
import android.view.View; 

public class ScreenShot extends MainActivity { 


private static Bitmap takeScreenShot(Activity MainActivity) 
{ 
    View view = MainActivity.getWindow().getDecorView(); 
    view.setDrawingCacheEnabled(true); 
    view.buildDrawingCache(); 
    Bitmap b1 = view.getDrawingCache(); 
    Rect frame = new Rect(); 
    MainActivity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame); 
    int statusBarHeight = frame.top; 
    int width = MainActivity.getWindowManager().getDefaultDisplay().getWidth(); 
    int height = MainActivity.getWindowManager().getDefaultDisplay().getHeight(); 

    Bitmap b = Bitmap.createBitmap(b1, 0, statusBarHeight, width, height - statusBarHeight); 
    view.destroyDrawingCache(); 
    return b; 
} 
private static void savePic(Bitmap b, String strFileName) 
{ 
    FileOutputStream fos = null; 
    try 
    { 
     fos = new FileOutputStream(strFileName); 
     if (null != fos) 
     { 
      b.compress(Bitmap.CompressFormat.PNG, 90, fos); 
      fos.flush(); 
      fos.close(); 
     } 
    } 
    catch (FileNotFoundException e) 
    { 
     e.printStackTrace(); 
    } 
    catch (IOException e) 
    { 
     e.printStackTrace(); 
    } 
} 
} 

Затем я поместил намерение начать ScreenShot.class в OnClick() в MainActivity:

Intent myIntentg = new Intent(view.getContext(), ScreenShot.class); 
      startActivityForResult(myIntentg, 0); 

Я также добавлен новый ScreenShot.java в манифест.

Теперь единственное, что происходит, это мой текущий вид активности вспышек и начинается, но скриншот не сделан или что-то еще не происходит.

+0

Контролирует ли когда-либо возврат или вы заканчиваете с ANR? Я бы предложил нарезать кнопку Button нажатием кнопки vs, чтобы она запускалась в основном потоке. – d3n13d1

+0

@ d3n13d1 Я получаю ANR – johnsonjp34

+0

Да, тогда окружайте его с помощью Thread, и вы должны быть в порядке, чтобы он не блокировал пользовательский интерфейс. Если есть проблема, вы узнаете больше. – d3n13d1

ответ

1

Нет причин для запуска другого намерения. В вашем методе onclick просто вытолкните вызов методам, которые фактически выполняют работу.

onClick(View view) { 
     new Thread(new Runnable() { 
      public void run() { 
       Call your methods 
      } 
     }).start(); 
} 
Смежные вопросы