【问题标题】:Android app for a responsive web site crashes on load up on real phone用于响应式网站的 Android 应用程序在真实手机上加载时崩溃
【发布时间】:2026-01-21 20:10:01
【问题描述】:

这是我第一次尝试 Android 编码。我们有一个响应式网站,我称自己为 Android 应用程序编写代码,以便人们在下载应用程序后单击图标并访问我们的网站。在模拟器上,该应用程序在各种测试手机上运行良好,但是当我上传 APK 进行分发并且有人下载并尝试运行它时,它甚至在看到启动屏幕之前就崩溃了。有人可以看看我的代码并告诉我出了什么问题。它似乎只在 Android 软件版本 6.0 或更高版本上崩溃。在旧手机和平板电脑上运行良好。这是我的“SplashScreenActivity.java、我的 MainActivity.java 和我的 AndroidManifest.xml 来自 Android Studios 版本 3.2.1 的副本。任何帮助将不胜感激。

SplashScreenActivity.java

    package com.wastefreemail.wfmconnect;
    import android.content.Intent;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.Window;
    import android.view.WindowManager;
    public class SplashScreenActivity extends AppCompatActivity {

    private int SLEEP_TIMER = 3;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);




        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_splash_screen);
        getSupportActionBar().hide();


        LogoLauncher logoLauncher = new LogoLauncher();
        logoLauncher.start();


    }

    private class LogoLauncher extends Thread{
      public void run(){
          try{
              sleep(1000 * SLEEP_TIMER);
          }catch(InterruptedException e){
              e.printStackTrace();

          }

          Intent intent = new Intent(SplashScreenActivity.this,         MainActivity.class);
          startActivity(intent);
          SplashScreenActivity.this.finish();
      }
    }
}

MainActivit.java

    package com.wastefreemail.wfmconnect;


    import android.app.Activity;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.Window;
    import android.view.WindowManager;
    import android.webkit.WebSettings;
    import android.webkit.WebView;
    import android.webkit.WebViewClient;



    public class MainActivity extends Activity {

    public WebView web1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);

        WebView web1 = (WebView)findViewById(R.id.web1);
        WebSettings webSettings = web1.getSettings();
        webSettings.setJavaScriptEnabled(true);
        web1.loadUrl("https://www.wastefreemail.com");
        web1.setWebViewClient(new WebViewClient());
    }
 }

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.wastefreemail.wfmconnect">

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">

    </activity>
    <activity android:name=".SplashScreenActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

</manifest>

【问题讨论】:

  • 分享您的构建 gradle 文件,以便我们查看您的最低和最高 sdk 版本。
  • 如果可能的话,将一部真正的安卓手机连接到您的电脑并在此处发布 logcat。
  • Zankrut,这是我的 build.gradle 的副本(模块:app)应用插件:'com.android.application' android { compileSdkVersion 28 defaultConfig { applicationId "com.wastefreemail.wfmconnect" minSdkVersion 15 targetSdkVersion 28 versionCode 10 versionName "1.2.7" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
  • Zankrut,我注意到该应用程序适用于某些手机,但不适用于其他手机。这是我当前的列表:它适用于以下设备:三星 8.0、LG 8.1、LG 7.0、阿尔卡特 8.1。以下它不起作用:三星8.1,摩托罗拉8.1。我很惊讶相同的软件版本可以在某些手机上运行,​​但在其他手机上不行,我能做些什么让它在所有或大部分手机上运行?

标签: android android-studio


【解决方案1】:

试试这个,

清单文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.chetan.testapp">

    <uses-permission android:name="android.permission.INTERNET"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

MainActivity.java

package com.wastefreemail.wfmconnect;



   import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;



public class MainActivity extends Activity {

    public WebView web1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       // requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);

        web1 = (WebView)findViewById(R.id.webView);
        WebSettings webSettings = web1.getSettings();
        webSettings.setJavaScriptEnabled(true);
        web1.loadUrl("http://www.wastefreemail.com/");
        web1.setWebViewClient(new WebViewClient());
    }
}

xml

<WebView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/webView"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

希望对你有帮助。

【讨论】:

  • 感谢回复,在真机上还是不行,模拟器很好用。只是为了确保您更改的唯一内容是 setContentView(R.layout.activity_splash_screen) 并且您将 URL 更改为 google.com。如果我能让它在模拟器上失败,那将有很大帮助。关于如何实现这一目标的任何理想?我觉得模拟器真的不是真手机的例子,因为我从两者得到的结果都不一样。
  • 它适用于我的手机。你加载什么网址
  • 除了我之前的 cmets 之外,您还注释掉了 requestWindowFeature(Window.Feature_NO_TITLE) 语句。
  • Chetan Mahajan,我试过 www.wastefreemail.com 和 nike.com
  • 等待我尝试两个链接
【解决方案2】:

您的启动画面活动似乎有问题。试试下面的代码,让我知道进一步的更新。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.activity_splash_screen);

    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {

            Intent intent = new Intent(SplashScreenActivity.this,MainActivity.class);
            startActivity(intent);
            finish();
        }
    },5000); //here 5000 represents 5 seconds. Change this according to your need.
}

编辑

如果这不起作用,那么在你的 styles.xml 文件中创建一个新样式。

<style name="AppTheme.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

并在 manifest.xml 文件中将此样式应用于您的活动。

<activity
    android:name=".SplashScreenActivity"
    android:theme="@style/AppTheme.NoActionBar" />

编辑

SupportActionBar 方法抛出空指针异常。在您的启动活动中使用此代码。它将解决问题。

    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.activity_splash_screen);
    try{
        getSupportActionBar().hide();
    } catch (NullPointerException e){
        e.printStackTrace();
    }

【讨论】:

  • 嗨 Zankrut,进行了所有更改,但仍然没有成功。
  • Zankrut,我确实注意到了另外一件事,如果我注释掉“setContentView(R.layout.activity_splash_screen);”它不会崩溃,它会将我带到真实手机和模拟器上的网站,但当然,我得到了 Splashscreen 的页面。
  • @stefansanders 在您的启动活动中使用第二个编辑代码。我重现了您的错误并找到了解决方案。
  • 嗨 Zankrut,我注意到启动画面图像位图太大,我将原始代码放回去并调整图像大小,之后一切正常。非常感谢您的所有帮助,以及其他所有提供帮助的人。
最近更新 更多