想要将我的应用程序的数字常量传输到res/value/integers.xml
下的文件。
我遇到了一个令人困惑的问题。它涉及函数Handler.postDelayed
:
Activity_A
中的代码:
new Handler().postDelayed(new Thread() {
@Override
public void run() {
Intent i_activity_b = new Intent(Activity_A.this, Activity_B.class);
Activity_A.this.startActivity(i_activity_b);
Activity_A.this.finish();
getApplicationContext().stopService(some_service);;
}
}, Data.GAME_THREAD_DELAY);
这段代码应该运行Activite_A
,以及some_service一段时间(GAME_THREAD_DELAY
)。
停止,停止some_service
并启动Activity_B
。
只要参数GAME_THREAD_DELAY
取自类(Data.GAME_THREAD_DELAY
),一切都可以。如果我从xml
文件(@ integer / GAME_THREAD_DELAY
)中删除它,则无效(Activity_B
无法启动)!!
有人可以帮助我吗?
以下是更多详情: MainActivity:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
final Intent musicIntent = new Intent(this, Music.class);
musicIntent.putExtra("musicToPlay", Data.SPLASH_MUSIC);
startService(musicIntent);
Data.display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
Data.context = getApplicationContext();
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView title_img = (ImageView) findViewById(R.id.title);
Animation title_animation = AnimationUtils.loadAnimation(this, R.anim.rotate);
title_img.startAnimation(title_animation);
new Handler().postDelayed(new Thread() {
@Override
public void run() {
Intent mainMenu = new Intent(MainActivity.this, MenuActivity.class);
MainActivity.this.startActivity(mainMenu);
MainActivity.this.finish();
getApplicationContext().stopService(musicIntent);;
}
}, Data.GAME_THREAD_DELAY);
}}
MenuActivity:
public class MenuActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
final Intent musicIntent = new Intent(this, Music.class);
musicIntent.putExtra("musicToPlay", Data.Menu_MUSIC);
startService(musicIntent);
Data.context = getApplicationContext();
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu);
}}
服务:
public class Music extends Service {
public static boolean isRunning = false;
MediaPlayer player;
public SolarisMusic() {
}
public int onStartCommand(Intent intent, int SoundFile, int startId) {
private static final String TAG = "Music";
super.onStartCommand(intent, SoundFile, startId);
Bundle extras = intent.getExtras();
if(extras == null) {
Log.d(TAG,"null");
} else {
int from = extras.getInt("musicToPlay");
if(from == Data.SPLASH_MUSIC){
player = MediaPlayer.create(Data.context, Data.SPLASH_MUSIC);
player.setLooping(Data.LOOP_BACKGROUND_MUSIC);
player.setVolume(Data.R_VOLUME, Data.L_VOLUME);
player.start();
}
else{
player = MediaPlayer.create(Data.context, Data.Menu_MUSIC);
player.setLooping(Data.LOOP_BACKGROUND_MUSIC);
player.setVolume(Data.R_VOLUME, Data.L_VOLUME);
player.start();
}
}
return 1;
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
public IBinder onUnBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
public void onStop() {
isRunning = false;
}
public void onPause() { }
@Override
public void onCreate() {
super.onCreate();
}
@Override
public void onDestroy() {
player.stop();
player.release();
}
@Override
public void onLowMemory() {
player.stop();
}}
答案 0 :(得分:0)
根据你的问题下面的评论,你试图将整数资源的ID作为延迟(而不是该资源的值)传递。
正确的代码看起来应该是这样的(假设您的整数资源的名称是GAME_THREAD_DELAY
):
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Intent mainMenu = new Intent(MainActivity.this, MenuActivity.class);
startActivity(mainMenu);
stopService(musicIntent);
finish();
}
}, getResources().getInteger(R.integer.GAME_THREAD_DELAY));