2013-03-25 10 views
19

Występuje problem z ładowaniem nowego zamiaru po wyświetleniu ekranu powitalnego. Przyjrzałem się problemom związanym z tym wyjątkiem, ale wszystkie wydają się mieć do czynienia z takimi rzeczami, jak Google Play czy mapy google, które nie zostały poprawnie odwołane, tak nie jest w moim przypadku.android.content.ActivityNotFoundException: Nie znaleziono żadnej funkcji do obsługi ekranu powitalnego Intent

Są Podobne pytania Mam spojrzał na

Not found activity to handle intent?

activity not found to handle intent

no activity found to handle intent

Poniżej jest mój manifest kod

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

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

    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 
     <activity 
      android:name=".Splash" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

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

       <category android:name="android.intent.category.DEFAULT" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name=".OrderPlaced" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.ORDERPLACED" /> 

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

</manifest> 

Oto Kod klasy powitalny

package com.android.main; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 

public class Splash extends Activity{ 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.splash); 

     Thread timer = new Thread(){ 
      public void run(){ 
       try{ 
        sleep(1000); 
       }catch(InterruptedException e) { 
        e.printStackTrace(); 
       }finally{ 
        Intent openStartingPoint = new Intent("com.android.main.HOMEPAGE"); 
        startActivity(openStartingPoint); 
       } 
      } 
     }; 
     timer.start(); 
    } 

    @Override 
    protected void onPause() { 

     super.onPause(); 
     finish(); 
    } 


} 

I tu jest klasa Strona WWW Próbuję załadować po ekranie powitalnym

package com.android.main; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.CheckBox; 
import android.widget.EditText; 
import android.widget.Spinner; 
import android.widget.TextView; 

public class HomePage extends Activity { 
    /** Called when the activity is first created. */ 


    TextView name; 
    EditText editName; 
    TextView drinks; 
    Spinner drinksSpinner; 
    TextView message; 
    CheckBox checkbox; 
    Button createOrderButton; 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     createOrder(); 
    } 

    public void createOrder(){ 

     createOrderButton = (Button) findViewById(R.id.bCreateOrder); 
     createOrderButton.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       postInformationtoAPI(); 

      } 

      private void postInformationtoAPI() { 

       goToOrderCompleted(); 
      } 

      private void goToOrderCompleted() { 
       Intent intent = new Intent(HomePage.this , OrderPlaced.class); 
       HomePage.this.startActivity(intent); 
       Log.i("onClick", "trying to start new activity to change layout"); 
      } 
     }); 

    } 
} 

Siła aplikacja jest zamykany po załadowaniu ekranu powitalnego i daje następujący wyjątek

03-14 22:32:33.553: E/AndroidRuntime(3166): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=com.android.main.HOMEPAGE } 

Każda pomoc z tym byłoby bardzo mile widziane

Odpowiedz

15

Trzeba odróżnić zamiarem jest konstruktorem,

Intent openStartingPoint = new Intent("com.android.main.HOMEPAGE"); 

zakładających Filter com.android.main.HOMEPAGE jak działania intencyjny za. Które nie jest dostępne w pliku android.xml Twojej aplikacji. Trzeba

<action android:name="android.intent.action.HOMEPAGE" />

które powinno być,

<action android:name="com.android.main.HOMEPAGE" />

LUB wystarczy zmienić go,

Intent openStartingPoint = new Intent(Splash.this, HOMEPAGE.class); 
+1

Dziękuję bardzo za szybką odpowiedź, która rozwiązała problem. – DavedCusack

1
 <activity 
     android:label="@string/app_name" 
     android:name=".SplashScreen" 
     android:screenOrientation="landscape" 
     android:theme="@android:style/Theme.NoTitleBar.Fullscreen" > 
     <intent-filter > 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name="com.android.main.HOMEPAGE" 
     android:screenOrientation="landscape" 
     android:theme="@android:style/Theme.NoTitleBar.Fullscreen" > 
     <intent-filter > 
      <action android:name="com.android.main.HOMEPAGE" /> 

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

także musiałbym zadanie timera, aby wyświetlić ekran powitalny

public class SplashScreen extends Activity{ 

Timer splashTimer; 
SplashTimerHandler splashTimerHandler; 

private boolean applicationPaused=false; 

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

    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 

    setContentView(R.layout.main); 

    this.setSplash(); 


} 

private void setSplash() 
{ 
    this.splashTimerHandler=new SplashTimerHandler(); 
    this.splashTimer=new Timer(); 

    this.splashTimer.schedule(this.splashTimerHandler, 0, 1000); 

} 

@Override 
public void onPause() 
{ 
    super.onPause(); 
    this.applicationPaused=true; 
    this.closeSplashTimer(); 
} 

@Override 
public void onResume() 
{ 
    super.onResume(); 

    if(this.applicationPaused) 
    { 
     this.applicationPaused=false; 
     this.closeSplashTimer(); 
     this.setSplash(); 
    } 
} 

public class SplashTimerHandler extends TimerTask{ 

    int splashTimerCounter=0; 
    @Override 
    public void run() 
    { 
     splashTimerCounter++; 
     if(splashTimerCounter>2) 
     { 
      runOnUiThread(splashTimeOver); 
     }  
    } 

    private Runnable splashTimeOver=new Runnable() { 

     @Override 
     public void run() 
     { 
      closeSplashTimer(); 
      startHomeScreen(); 
     } 
    };  
} 

protected void closeSplashTimer() 
{ 
    if(this.splashTimer!=null) 
    { 
     this.splashTimer.cancel(); 
     this.splashTimer=null; 
    } 

} 

private void startHomeScreen() 
{ 
    this.closeSplashScreen(); 
    startActivity(new Intent("com.android.main.HOMEPAGE")); 

} 

private void closeSplashScreen() 
{ 
    this.closeSplashTimer(); 
    this.finish(); 

} 

@Override 
public boolean onKeyDown(int keycode, KeyEvent event) 
{ 
    if(keycode==KeyEvent.KEYCODE_BACK) 
    { 
     this.closeSplashScreen(); 
    } 
    return true; 
} 
} 
+0

Super dzięki za radę na ekranie powitalnym, czy to po prostu lepszy sposób podejścia do ekranów powitalnych w ogóle? – DavedCusack

Powiązane problemy