2

LoginActivity如果没有帐户,我想强制我的应用程序运行。

我已经完成了以下操作,但是当我在模拟器中启动应用程序时,我还是MainActivityTest会出现。

现在我在模拟器上没有我的应用程序的帐户,所以我希望只看到登录屏幕。但是,我看到的似乎MainActivityTest正在运行

public class AccountAuthenticator extends AbstractAccountAuthenticator {
    private Context context;
    private static final String TAG = "AccountAuthenticator";
    public AccountAuthenticator(final Context context) {
        super(context);
        this.context = context;
    }

    @Override
    public Bundle addAccount(final AccountAuthenticatorResponse response,
                             final String accountType, final String authTokenType,
                             final String[] requiredFeatures, final Bundle options) throws NetworkErrorException {
        final Intent intent = new Intent(context, LoginActivity.class);
        final Bundle bundle = new Bundle();
        bundle.putParcelable(KEY_INTENT, intent);
        return bundle;

    }
  ...
}

public class AccountAuthenticatorService extends Service {

    private static AccountAuthenticator AUTHENTICATOR;

    public IBinder onBind(Intent intent) {
        return intent.getAction().equals(ACTION_AUTHENTICATOR_INTENT) ? getAuthenticator()
                .getIBinder() : null;
    }

    private AccountAuthenticator getAuthenticator() {
        if (AUTHENTICATOR == null)
            AUTHENTICATOR = new AccountAuthenticator(this);
        return AUTHENTICATOR;
    }
}

public class LoginActivity extends RoboSherlockAccountAuthenticatorActivity {
    @Override
    public void startActivity(Intent intent) {
        if (intent != null && ACTION_VIEW.equals(intent.getAction()))
            intent.addCategory(CATEGORY_BROWSABLE);
        super.startActivity(intent);
    }

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

AndroidManifest.xml的就像下面

   <application
          android:icon="@drawable/ic_launcher"
          android:label="myapp" >
       <activity
        android:name=".ui.ui.MainActivityTest"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
       </activity>

    <service
        android:name="com.myapp.AccountAuthenticatorService"
        android:exported="false"
        android:process=":auth" >
        <intent-filter>
            <action android:name="android.accounts.AccountAuthenticator" />
        </intent-filter>

        <meta-data
            android:name="android.accounts.AccountAuthenticator"
            android:resource="@xml/authenticator" />
    </service>
    <activity
        android:name="com.myapp.LoginActivity"
        android:configChanges="orientation|keyboardHidden|screenSize"
        android:excludeFromRecents="true" >
        <!--
            No intent-filter here! This activity is only ever launched by
            someone who explicitly knows the class name
        -->
    </activity>
   </application
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
<uses-permission android:name="android.permission.READ_SYNC_STATS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
4

2 回答 2

2

如果您在完成登录过程后将价值置于共享偏好中,那将很简单。每次启动应用程序时,检查 sharedpreference 值并导航到活动

 Boolean mobile_register_flag = sharedpref.getBoolean("mobile_register_flag", false);

 if (!mobile_register_flag) {
            Intent intent = new Intent(FlashView.this,
                    RegisterActivity.class);
            startActivity(intent);
        } else {
            Intent intent = new Intent(FlashView.this,
                    ActivityTwo.class);
            startActivity(intent);
        }
于 2013-12-20T04:40:30.113 回答
1

当您在模拟器中启动应用程序时,会出现 MainActivityTest,因为您的 AndroidManifest 具有:

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

如果要默认启动 LoginActivity,请使用

   <activity
    android:name="com.myapp.LoginActivity"
    android:configChanges="orientation|keyboardHidden|screenSize"
    android:excludeFromRecents="true" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
   </activity>

否则,如果您想根据某些条件将 LoginActivity 显示为第一个活动,那么

  1. 在 android manifest 中,保持 MainActivityTest 作为默认活动
  2. 在 MainActivityTest->onCreate,检查条件,如果条件为真,启动 LoginActivity
于 2013-12-20T04:21:56.403 回答