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 в манифест.
Теперь единственное, что происходит, это мой текущий вид активности вспышек и начинается, но скриншот не сделан или что-то еще не происходит.
Контролирует ли когда-либо возврат или вы заканчиваете с ANR? Я бы предложил нарезать кнопку Button нажатием кнопки vs, чтобы она запускалась в основном потоке. – d3n13d1
@ d3n13d1 Я получаю ANR – johnsonjp34
Да, тогда окружайте его с помощью Thread, и вы должны быть в порядке, чтобы он не блокировал пользовательский интерфейс. Если есть проблема, вы узнаете больше. – d3n13d1