我是这个世界的新人。我使用startActivity(intent)时遇到问题。 这是清单:
<activity
android:name="com.example.counter.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="com.example.counter.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
这是代码:
public class Splash extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
Thread timer = new Thread(){
public void run()
{
try
{
sleep(5000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
finally
{
Intent i=new Intent ("com.example.counter.MainActivity");
startActivity(i);
}
}
};
timer.start();
}
我想显示Splash活动5秒钟,然后显示MainActivity。 LogErrors:!https://www.dropbox.com/s/kg7xyp6h4b95itq/Screenshot%202014-02-08%2016.57.36.png
答案 0 :(得分:14)
有两种方法可以做你想做的事。
Intent
Intent
Intent
为Intent Filters
中的Activity
声明AndroidManifest.xml
。通过这样做,Android
系统了解您的组件(在这种情况下,您的MainActivity)可以处理的Intents
类型。
<activity
android:name="com.example.counter.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="com.example.counter.MainAction" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<activity>
现在,您可以使用相同的Activity
Intent
Intent i=new Intent ("com.example.counter.MainAction");
startActivity(i);
当您没有明确知道必须启动哪个Activity并且您希望Android系统决定启动哪个组件时,会使用这种隐式Intents
。如果系统找到多个可以处理您的Intent的组件,它将允许用户选择。
注意:可能没有可以处理您意图的应用程序。在这种情况下,当您调用startActivity()时,您的应用程序将崩溃。为避免这种情况,在调用startActivity()之前,首先应验证系统中是否至少有一个可以处理意图的应用程序。为此,请在intent对象上使用resolveActivity()。
Intent
在您的情况下,您应该使用明确的Intent
,因为您已经知道要启动哪个Activity
。因此,通过传递要启动的上下文和组件(Activity)类来创建Intent
。
Intent i=new Intent (this,MainActivity.class);
startActivity(i);
答案 1 :(得分:3)
您必须引用您想要开始的class
。所以你需要这样的东西:
Intent newAct = new Intent(this, Splash.class);
startActivity(newAct);
您传递的内容是Action
,不能被理解为类名。
答案 2 :(得分:1)
我猜,Splash
是您的启动器活动,在您的清单文件中进行以下更改:
<activity
android:name="com.example.counter.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="com.example.counter.MainActivity"
android:label="@string/app_name" >
</activity>
以这种方式开展活动:
public class Splash extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
/*Splach screen that display for 5 seconds when app start*/
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Intent i = new Intent(Splash.this, MainActivity.class);
startActivity(i);
finish();
}
}, 5000);
}
}
我希望现在能解决你的问题。
答案 3 :(得分:1)
我认为你应该能够使用(隐含意图):
Intent i=new Intent ("com.example.counter.MainActivity");
没有理由将其更改为(明确意图):
startActivity(new Intent(mContext, MainActivity.class));
但是您需要更改MainActivity的action
中的intent filter
:
<action android:name="android.intent.action.MAIN" />
为:
<action android:name="com.example.counter.MainActivity"/>
答案 4 :(得分:0)
您需要在清单文件中declare an activity。
像这样:
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".FirstActivity"
android:label="@string/title_activity_main" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activty
android:name="com.example.counter.MainActivity"/>
</application>
希望它有所帮助。
答案 5 :(得分:0)
我认为如果你使用Handler将此代码放在onCreate的splash活动中会更好
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
startActivity(intent);
finish();
}
}, 1500);
如果你想打开它一次,最好使用SharedPreferences