-2

Я хочу сделать заставку в течение 3 секунд, когда пользователь нажимает значок приложения на своем телефоне. Ниже мой код. Я не понимаю, в чем проблема. У меня нет ошибок (без красных строк) на любом из этих файлов.Почему мой всплывающий экран не появляется при запуске эмулятора?

Вот мой splash.java файл:

package org.example.name.tamsky; 

import android.content.Intent; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 

public class splash extends AppCompatActivity { 

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

     Thread myThread = new Thread() { 
      @Override 
      public void run() { 
       try { 
        sleep(3000); 
        Intent intent = new Intent(getApplicationContext(),MainActivity.class); 
        startActivity(intent); 
        finish(); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
      } 
     }; 
     myThread.start(); 
    } 
} 

Вот мой activity_splash.xml файл:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_splash" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="org.example.name.tamsky.splash"> 

    <ImageView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:src="@drawable/splash"/> 

</RelativeLayout> 

Вот мой AndroidManifest.xml файл:

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

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

</manifest> 

Ошибка я получаю, когда я пытаюсь запустить эмулятор:

Error running MainActivity: 
The activity must be exported or contain an intent-filter 
+1

Я не думаю, вы можете startActivity из Thread (рабочий поток). Это должно быть из потока пользовательского интерфейса. Вместо этого используйте Handler для задержки. http://stackoverflow.com/a/5486970/2956135 – Emma

ответ

0

В вашем Manifest.xml попытаться изменить эту строку:

<activity android:name=".MainActivity"></activity>

к:

<activity android:name=".MainActivity"> 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter> 
</activity> 
+0

Спасибо: D Пятно на! – chompy

0

Попробуйте это с помощью обработчика

import android.content.Intent; 
import android.os.Handler; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
public class SplashActivity extends AppCompatActivity { 
private int SPLASH_DISPLAY_LENGTH=500; 
    Tracker mTracker; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_splash); 
     new Handler().postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       Intent intent=new Intent(SplashActivity.this,MainActivity.class); 
       SplashActivity.this.startActivity(intent); 
       SplashActivity.this.finish(); 
      } 
     },SPLASH_DISPLAY_LENGTH); 
    } 
}