0

我想去一个带有从 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); 
            }
        }
    }
}
4

6 回答 6

3

您可以使用setClassName()Intent绝对适合您的解决方案。

Intent gotoPhoneDetail = new Intent(getApplicationContext());
gotoPhoneDetail.setClassName(getApplicationContext(), getApplicationContext().getPackageName()+"."+resultPhone);

注意:类必须存在并且必须在 Android Manifest 文件中有条目

于 2012-08-30T06:32:50.337 回答
0

我认为这是不行的。请记住,您必须首先在清单文件中注册活动。你打算如何实施?

于 2012-08-30T06:24:33.457 回答
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

于 2012-08-30T06:26:21.547 回答
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 ...
}

让我知道它是否有效。

于 2012-08-30T06:33:46.930 回答
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);

}
于 2012-08-30T06:39:34.787 回答
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);
于 2012-08-30T07:26:51.473 回答