为什么我的 Camera Intent 只有在打开 Webview 后才会杀死应用程序?
Why Would My Camera Intent Kill The App Only After Opening a Webview?
所以我正在经历对我来说相当奇怪的事情。我的应用程序中有一个 activity 允许用户拍照然后发送它,它自己工作得很好。但是,如果我转到应用程序的另一部分并启动 Web View,然后返回到相机,我一拍照,应用程序就会被终止。有没有人猜到或知道为什么会这样?我对 webview 如何做这样的事情感到困惑。它每次都能正常工作,直到我加载 webview activity.
void SelectImage() {
try
{
Intent intent = new Intent
(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, 0);
}
catch (Exception e) {
Log.d("Exception:", e.toString());
e.printStackTrace();
}
}
void TakePhoto() {
try
{
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 1);
}
catch (Exception e) {
Log.d("Exception:", e.toString());
e.printStackTrace();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
try {
Log.d("Result Code:", Integer.toString(resultCode));
if(data != null)
Log.d("Data Results:", data.getDataString());
if (resultCode == RESULT_OK && data != null) {
if (requestCode == 0 || requestCode == 1) {
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_SUBJECT, "Photo Submission From Android");
intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"a@b.com"});
Uri uri = data.getData();
intent.putExtra(android.content.Intent.EXTRA_STREAM, uri);
startActivityForResult(Intent.createChooser(intent, "Send Your Photo!"), 2);
}
}
}
catch (Exception e) { Log.d("Exception:", e.toString()); e.printStackTrace(); }
}
和 Webview activity:;
public class Activity_WebView extends FragmentActivity {
static WebView m_WebView;
ProgressDialog m_ProgressDialog;
boolean m_FirstLoad = true;
String m_RequestType = null;
String m_OrderUrl = "";
String m_FacebookUrl = "https://mobile.facebook.com/";
String m_TwitterUrl = "https://mobile.twitter.com/";
private class LocalWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
try {
if (m_FirstLoad) {
m_ProgressDialog = new ProgressDialog(Activity_WebView.this);
m_ProgressDialog.setTitle("Gathering Data..");
m_ProgressDialog.setMessage("One Moment Please");
m_ProgressDialog.setCancelable(false);
m_ProgressDialog.show();
m_FirstLoad = false;
}
} catch (Exception e) {
e.printStackTrace();
Log.d("Error:", e.toString());
}
}
@Override
public void onPageFinished(WebView view, String url) {
try {
if (m_ProgressDialog.isShowing())
m_ProgressDialog.dismiss();
super.onPageFinished(view, url);
} catch (Exception e) {
e.printStackTrace();
Log.d("Error:", e.toString());
}
}
}
@Override
public void finish() {
ViewGroup view = (ViewGroup) getWindow().getDecorView();
view.removeAllViews();
super.finish();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
String tempUrl = "";
m_RequestType = getIntent().getStringExtra("requestType");
switch (m_RequestType)
{
case "menu": {
tempUrl = m_OrderUrl;
break;
}
case "facebook": {
tempUrl = m_FacebookUrl;
break;
}
case "twitter": {
tempUrl = m_TwitterUrl;
break;
}
default:
break;
}
setContentView(R.layout.activity_webview);
m_WebView = (WebView) findViewById(R.id.webView);
m_WebView.setWebViewClient(new LocalWebViewClient());
m_WebView.getSettings().setJavaScriptEnabled(true);
m_WebView.getSettings().setLoadWithOverviewMode(true);
m_WebView.getSettings().setUseWideViewPort(true);
m_WebView.getSettings().setBuiltInZoomControls(true);
m_WebView.loadUrl(tempUrl);
m_FirstLoad = true;
}
catch (Exception e) { e.printStackTrace(); Log.d("Error:", e.toString()); }
}
}
全靠记忆。 Web View 消耗比较大,Camera app 需要比较大。你可以在模拟器上试试这个,玩玩 RAM 的大小。
其实相机意图并不特别:尝试开始评级意图 - 模式会非常相似。
所以我正在经历对我来说相当奇怪的事情。我的应用程序中有一个 activity 允许用户拍照然后发送它,它自己工作得很好。但是,如果我转到应用程序的另一部分并启动 Web View,然后返回到相机,我一拍照,应用程序就会被终止。有没有人猜到或知道为什么会这样?我对 webview 如何做这样的事情感到困惑。它每次都能正常工作,直到我加载 webview activity.
void SelectImage() {
try
{
Intent intent = new Intent
(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, 0);
}
catch (Exception e) {
Log.d("Exception:", e.toString());
e.printStackTrace();
}
}
void TakePhoto() {
try
{
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 1);
}
catch (Exception e) {
Log.d("Exception:", e.toString());
e.printStackTrace();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
try {
Log.d("Result Code:", Integer.toString(resultCode));
if(data != null)
Log.d("Data Results:", data.getDataString());
if (resultCode == RESULT_OK && data != null) {
if (requestCode == 0 || requestCode == 1) {
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_SUBJECT, "Photo Submission From Android");
intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"a@b.com"});
Uri uri = data.getData();
intent.putExtra(android.content.Intent.EXTRA_STREAM, uri);
startActivityForResult(Intent.createChooser(intent, "Send Your Photo!"), 2);
}
}
}
catch (Exception e) { Log.d("Exception:", e.toString()); e.printStackTrace(); }
}
和 Webview activity:;
public class Activity_WebView extends FragmentActivity {
static WebView m_WebView;
ProgressDialog m_ProgressDialog;
boolean m_FirstLoad = true;
String m_RequestType = null;
String m_OrderUrl = "";
String m_FacebookUrl = "https://mobile.facebook.com/";
String m_TwitterUrl = "https://mobile.twitter.com/";
private class LocalWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
try {
if (m_FirstLoad) {
m_ProgressDialog = new ProgressDialog(Activity_WebView.this);
m_ProgressDialog.setTitle("Gathering Data..");
m_ProgressDialog.setMessage("One Moment Please");
m_ProgressDialog.setCancelable(false);
m_ProgressDialog.show();
m_FirstLoad = false;
}
} catch (Exception e) {
e.printStackTrace();
Log.d("Error:", e.toString());
}
}
@Override
public void onPageFinished(WebView view, String url) {
try {
if (m_ProgressDialog.isShowing())
m_ProgressDialog.dismiss();
super.onPageFinished(view, url);
} catch (Exception e) {
e.printStackTrace();
Log.d("Error:", e.toString());
}
}
}
@Override
public void finish() {
ViewGroup view = (ViewGroup) getWindow().getDecorView();
view.removeAllViews();
super.finish();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
String tempUrl = "";
m_RequestType = getIntent().getStringExtra("requestType");
switch (m_RequestType)
{
case "menu": {
tempUrl = m_OrderUrl;
break;
}
case "facebook": {
tempUrl = m_FacebookUrl;
break;
}
case "twitter": {
tempUrl = m_TwitterUrl;
break;
}
default:
break;
}
setContentView(R.layout.activity_webview);
m_WebView = (WebView) findViewById(R.id.webView);
m_WebView.setWebViewClient(new LocalWebViewClient());
m_WebView.getSettings().setJavaScriptEnabled(true);
m_WebView.getSettings().setLoadWithOverviewMode(true);
m_WebView.getSettings().setUseWideViewPort(true);
m_WebView.getSettings().setBuiltInZoomControls(true);
m_WebView.loadUrl(tempUrl);
m_FirstLoad = true;
}
catch (Exception e) { e.printStackTrace(); Log.d("Error:", e.toString()); }
}
}
全靠记忆。 Web View 消耗比较大,Camera app 需要比较大。你可以在模拟器上试试这个,玩玩 RAM 的大小。
其实相机意图并不特别:尝试开始评级意图 - 模式会非常相似。