我想使用从resultPhone返回的名称进行活动,例如:当前的手机名称是GalaxyS3,然后我希望它转到GalaxyS3.class。我怎么能这样做?
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String[] supportedPhone = getResources().getStringArray(R.array.supported_phone);
String[] supportedVersion = getResources().getStringArray(R.array.supported_version);
String currentPhone = android.os.Build.MODEL;
String currentVersion = android.os.Build.VERSION.RELEASE;
for(String cP : supportedPhone) {
String resultPhone = cP;
for(String cV : supportedVersion) {
String resultVersion = cV;
if ((currentPhone.equalsIgnoreCase(resultPhone)) && (currentVersion.equalsIgnoreCase(resultVersion))) {
Intent gotoPhoneDetail = new Intent(this, "resultPhone" + ".class");
startActivity(gotoPhoneDetail);
// how can i make this go to the activity with the name return from resultPhone?
} else {
setContentView(R.layout.phone_checker);
}
}
}
}
答案 0 :(得分:3)
您可以使用Intent setClassName()
这绝对适合您的解决方案。
Intent gotoPhoneDetail = new Intent(getApplicationContext());
gotoPhoneDetail.setClassName(getApplicationContext(), getApplicationContext().getPackageName()+"."+resultPhone);
注意:类必须存在,并且必须在Android Manifest文件中有条目
答案 1 :(得分:0)
我觉得这不行。请记住,您必须先在清单文件中注册活动。您打算如何实施?
答案 2 :(得分:0)
使用startActivity()
方法启动任何activity
。
Intent intent = new Intent(YourCurrentActivity.this,YourNewActivity.class); // In your case GalaxyS3.class
startActivity(intent); // Like this you can start Activity.
并且始终在AndroidMenifest
标记下的application
文件中提及新活动的名称。
答案 3 :(得分:0)
您应该能够使用以下方法从名称中检索类对象:
Class.forName ( className );
其中className是一个包含类名的字符串(在您的情况下是resultPhone)。
尝试以下方法:
try {
Class <?> myActivity = Class.forName ( resultPhone );
Intent intent = new Intent ( this , myActivity );
startActivity ( intent );
} catch (ClassNotFoundException e) {
e.printStackTrace();
// Do something else, maybe warn the user that the application does not support his/her phone ...
}
让我知道它是否有效。
答案 4 :(得分:0)
您应该使用Class.forName():
if ((currentPhone.equalsIgnoreCase(resultPhone)) && (currentVersion.equalsIgnoreCase(resultVersion))) {
Class<?> phoneClass = null;
try {
phoneClass = Class.forName(resultPhone);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Intent gotoPhoneDetail = new Intent(this, phoneClass);
startActivity(gotoPhoneDetail);
}
答案 5 :(得分:0)
使用Class.forName(resultPhone)将为您提供Class对象,您可以在意图中使用它,如此处许多人所建议的那样。但是你使用的逻辑容易出错,从长远来看可能不是一个好的逻辑。我建议你使用'工厂类'来获取Class对象。
这样,您可以在将来添加更多支持手机,如果不支持该型号,也可以添加默认类。工厂类可能看起来像这样
class PhoneModelClassFactory{
public static Class getPhoneModel(String className){
if (className.equals("GS3")) return GS3.class
else if(className.equals("GS4")) return GS4.class
// add more here
else return DefaultPhoneModel.class
}
}
现在你可以从你的方法中打电话
Class phoneClass = PhoneModelClassFactory.getPhoneModel(currentPhone);
Intent i = new Intent(this, phoneClass);
startActivity(i);