0

这是一个启动屏幕的示例,但由于我无法查看我的 MainActivity 类,无法识别问题,因此遇到了困难。通过更改操作和类别名称在清单文件中进行了尝试,但无法能够解决它。

基本上也改变了我Intent intent = new Intent();的,但仍然如此。

    public class SplashActivity extends Activity
    {

        MediaPlayer player;

        @Override
        protected void onCreate(Bundle savedInstanceState) 
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.splash);

            player = MediaPlayer.create(SplashActivity.this, R.raw.splash);
            player.start();
            Thread timer = new Thread() 
            {

                @Override
                public void run() 
                {
                    try
                    {               
                        sleep(4000);

                    }catch(InterruptedException e)
                    {
                        e.printStackTrace();
                    }

                        finish();
                        Intent intent = new Intent();
                        intent.setClass(SplashActivity.this, MainActivity.class);
                        startActivity(intent);
                        stop();




                }
            };
            timer.start();

        }

        @Override
        protected void onPause() 
        {
            super.onPause();
            player.release();
            finish();
        }


    }

====>这是我的清单文件——

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

    <uses-sdk android:minSdkVersion="10" />

    <application
        android:icon="@drawable/android_splash"
        android:label="@string/app_name" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

        <activity android:name=".SplashActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>


    </application>

</manifest>
4

3 回答 3

1

我猜你的问题是,你在开始新的活动之前完成了你的活动。如果您调用finish()您的活动,它将被销毁,因此startActivity()将不再被调用(或者如果将被调用,它将不再获得有效的上下文)。因此,尝试在方法结束时移动 finish() 方法run,这应该可以解决问题。

于 2012-07-25T12:25:14.620 回答
0

另一种非常简短、简单且有效的实现 Flash 屏幕的方法如下:

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.splash);

        Handler handler=new Handler();
        Runnable gotoMain=new Runnable() {
        public void run() 
        {
          startActivity(new Intent(SplashActivity.this, MainActivity.class));
          finish();
        }
      };
      handler.postDelayed(gotoMain, 4000);
    }  

你只需用这个替换你的 OnCreate 方法。

于 2012-07-25T12:34:50.477 回答
0

您应该注意以下几点: 1. 不鼓励使用 stop() 和使用它的位置。除了被弃用之外,它还会为您提供 UnsupportedOperationExcecption。2. 您的 MediaPlayer 是否正确初始化且没有任何错误?检查日志。3. 你在 onPause() 方法中使用 finish() 的原因是什么?不推荐。4. 您将 MAIN 操作分配给您的两个活动。虽然允许,但应该有特定的原因。

但是,所有这些事情都不应避免您的应用程序进入主要活动。您的主要活动代码可能有原因。

于 2012-07-25T13:15:44.017 回答