gpt4 book ai didi

android - 登录成功后隐藏登录页面并在android中显示main_activity

转载 作者:行者123 更新时间:2023-11-29 20:16:39 25 4
gpt4 key购买 nike

我是 android studio 的新手,我创建了一个应用程序,它有一个使用 GCM 通知的 Android webview。该应用程序有两个 Activity :

  1. activity_register(用于新用户注册应用)
  2. activity_main(用作应用程序的主屏幕)

每次显示 activity_register 时我启动我的应用程序时。我想在用户第一次成功登录后隐藏 activity_register。

1)activity_register LOGIN WINDOW SCREEN

AndroidMainfest.xml

<application
android:name="com.eduapp.Controller"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar">




<!-- Main Activity -->
<activity
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:theme="@android:style/Theme.NoTitleBar"
android:name="com.eduapp.MainActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="@string/app_name" >

</activity>

<!-- Register Activity -->
<activity
android:name="com.eduapp.RegisterActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<action android:name="android.intent.action.DELETE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="com.idrivecare.familypro" />
</intent-filter>
</activity>

MainActivity.java

public class MainActivity extends Activity {
// label to display gcm messages
TextView lblMessage;
Controller aController;


//----------------------------------------------------

private WebView webView;
private ProgressBar progress;
public Uri imageUri;

//-----------------------------------------------------


// Asyntask
AsyncTask<Void, Void, Void> mRegisterTask;

public static String name;
public static String email;
//-------------------ON-CREATE-START-------------------
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);


//---------------------------------------------------------
//web settings
webView = (WebView) findViewById(R.id.webView);
WebSettings webSettings = webView.getSettings();
webView.getSettings().setAllowFileAccess(true);
webView.getSettings().setAppCacheEnabled(true);
webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);

//progress bar setting
progress = (ProgressBar) findViewById(R.id.progressBar);
progress.setMax(100);

//load page settings
webView.setWebChromeClient(new MyWebViewClient());
// mWebView.setWebChromeClient(new WebChromeClient());
webView.setWebViewClient(new WebViewClient());
webView.loadUrl("http://demo.eduapp.in/pages_admin");

//-------------------------------------------------------------------

//Get Global Controller Class object (see application tag in AndroidManifest.xml)
aController = (Controller) getApplicationContext();


// Check if Internet present
if (!aController.isConnectingToInternet()) {

// Internet Connection is not present
aController.showAlertDialog(MainActivity.this,
"Internet Connection Error",
"Please connect to Internet connection", false);
// stop executing code by return
return;
}

// Getting name, email from intent
Intent i = getIntent();

name = i.getStringExtra("name");
email = i.getStringExtra("email");

// Make sure the device has the proper dependencies.
GCMRegistrar.checkDevice(this);

// Make sure the manifest permissions was properly set
GCMRegistrar.checkManifest(this);

lblMessage = (TextView) findViewById(R.id.lblMessage);

// Register custom Broadcast receiver to show messages on activity
registerReceiver(mHandleMessageReceiver, new IntentFilter(
Config.DISPLAY_MESSAGE_ACTION));

// Get GCM registration id
final String regId = GCMRegistrar.getRegistrationId(this);

// Check if regid already presents
if (regId.equals("")) {

// Register with GCM
GCMRegistrar.register(this, Config.GOOGLE_SENDER_ID);

} else {

// Device is already registered on GCM Server
if (GCMRegistrar.isRegisteredOnServer(this)) {

// Skips registration.
Toast.makeText(getApplicationContext(),
"Already registered with GCM Server",
Toast.LENGTH_LONG).
show();

} else {

// Try to register again, but not in the UI thread.
// It's also necessary to cancel the thread onDestroy(),
// hence the use of AsyncTask instead of a raw thread.

final Context context = this;
mRegisterTask = new AsyncTask<Void, Void, Void>() {

@Override
protected Void doInBackground(Void... params) {

// Register on our server
// On server creates a new user
aController.register(context, name, email, regId);

return null;
}

@Override
protected void onPostExecute(Void result) {
mRegisterTask = null;
}

};

// execute AsyncTask
mRegisterTask.execute(null, null, null);

}




}
}

//-------------------ON-CREATE-END-------------------

// Create a broadcast receiver to get message and show on screen
private final BroadcastReceiver mHandleMessageReceiver = new BroadcastReceiver() {

@Override
public void onReceive(Context context, Intent intent) {

String newMessage = intent.getExtras().getString(Config.EXTRA_MESSAGE);

// Waking up mobile if it is sleeping
aController.acquireWakeLock(getApplicationContext());

// Display message on the screen
lblMessage.append(newMessage + " ");

Toast.makeText(getApplicationContext(),
"Got Message: " + newMessage,
Toast.LENGTH_LONG).show();

// Releasing wake lock
aController.releaseWakeLock();
}
};

@Override
protected void onDestroy() {
// Cancel AsyncTask
if (mRegisterTask != null) {
mRegisterTask.cancel(true);
}
try {
// Unregister Broadcast Receiver
unregisterReceiver(mHandleMessageReceiver);

//Clear internal resources.
GCMRegistrar.onDestroy(this);

} catch (Exception e) {
// Log.e("UnRegister Receiver Error","> " + e.getMessage());
}
super.onDestroy();
}
private class MyWebViewClient extends WebChromeClient
{

@Override
public void onProgressChanged(WebView view, int newProgress) {

if (!DetectConnection.checkInternetConnection(MainActivity.this)) {
Toast.makeText(getApplicationContext(), "No Internet!", Toast.LENGTH_SHORT).show();
findViewById(R.id.imageLoading2).setVisibility(View.VISIBLE);
progress.setVisibility(View.GONE);
} else {
findViewById(R.id.webView).setVisibility(View.VISIBLE);
MainActivity.this.progress.setProgress(0);
MainActivity.this.setValue(newProgress);
super.onProgressChanged(view, newProgress);

if (newProgress >= 100) {
progress.setVisibility(View.GONE);
findViewById(R.id.imageLoading1).setVisibility(View.GONE);

} else {
progress.setVisibility(View.VISIBLE);
findViewById(R.id.imageLoading2).setVisibility(View.GONE);
findViewById(R.id.imageLoading1).setVisibility(View.VISIBLE);
findViewById(R.id.webView).setVisibility(View.GONE);
}
}
}

// You can create external class extends with WebChromeClient
// Taking WebViewClient as inner class
// we will define openFileChooser for select file from camera or sdcard


}



@Override
// Detect when the back button is pressed
public void onBackPressed() {

if(webView.canGoBack()) {

webView.goBack();
} else {
// Let the system handle the back button
super.onBackPressed();
}
}


public void setValue(int progress) {
this.progress.setProgress(progress);

}


}

RegisterActivity.java

public class RegisterActivity extends Activity {

// UI elements
EditText txtName;
EditText txtEmail;

// Register button
Button btnRegister;

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

//Get Global Controller Class object (see application tag in AndroidManifest.xml)
final Controller aController = (Controller) getApplicationContext();

// Check if Internet Connection present
if (!aController.isConnectingToInternet()) {

// Internet Connection is not present
aController.showAlertDialog(RegisterActivity.this,
"Internet Connection Error",
"Please connect to working Internet connection", false);

// stop executing code by return
return;
}

// Check if GCM configuration is set
if (Config.YOUR_SERVER_URL == null
|| Config.GOOGLE_SENDER_ID == null
|| Config.YOUR_SERVER_URL.length() == 0
|| Config.GOOGLE_SENDER_ID.length() == 0) {

// GCM sernder id / server url is missing
aController.showAlertDialog(RegisterActivity.this, "Configuration Error!",
"Please set your Server URL and GCM Sender ID", false);

// stop executing code by return
return;
}

txtName = (EditText) findViewById(R.id.txtName);
txtEmail = (EditText) findViewById(R.id.txtEmail);
btnRegister = (Button) findViewById(R.id.btnRegister);

// Click event on Register button
btnRegister.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View arg0) {
// Get data from EditText
String name = txtName.getText().toString();
String email = txtEmail.getText().toString();

// Check if user filled the form
if(name.trim().length() > 0 && email.trim().length() > 0){

// Launch Main Activity
Intent i = new Intent(getApplicationContext(), MainActivity.class);

// Registering user on our server
// Sending registraiton details to MainActivity
i.putExtra("name", name);
i.putExtra("email", email);
startActivity(i);
finish();

}else{

// user doen't filled that data
aController.showAlertDialog(RegisterActivity.this,
"Registration Error!",
"Please enter your details",
false);
}
}
});
}

}

Confing.java

public interface Config {


// CONSTANTS
static final String YOUR_SERVER_URL ="http://eduapp.in/hello/register.php";

// Google project id
static final String GOOGLE_SENDER_ID = "189074368474";

/**
* Tag used on log messages.
*/
static final String TAG = "GCM Android Example";

static final String DISPLAY_MESSAGE_ACTION ="com.eduapp.DISPLAY_MESSAGE";

static final String EXTRA_MESSAGE = "message";


}

GCMIntentService.java

public class GCMIntentService extends GCMBaseIntentService {

private static final String TAG = "GCMIntentService";

private Controller aController = null;

public GCMIntentService() {
// Call extended class Constructor GCMBaseIntentService
super(Config.GOOGLE_SENDER_ID);
}

/**
* Method called on device registered
**/
@Override
protected void onRegistered(Context context, String registrationId) {

//Get Global Controller Class object (see application tag in AndroidManifest.xml)
if(aController == null)
aController = (Controller) getApplicationContext();

Log.i(TAG, "Device registered: regId = " + registrationId);
aController.displayMessageOnScreen(context,
"Your device registred with GCM");
Log.d("NAME", MainActivity.name);
aController.register(context, MainActivity.name,
MainActivity.email, registrationId);
}

/**
* Method called on device unregistred
* */
@Override
protected void onUnregistered(Context context, String registrationId) {
if(aController == null)
aController = (Controller) getApplicationContext();
Log.i(TAG, "Device unregistered");
aController.displayMessageOnScreen(context,getString(R.string.gcm_unregistered));
aController.unregister(context, registrationId);
}

/**
* Method called on Receiving a new message from GCM server
* */
@Override
protected void onMessage(Context context, Intent intent) {

if(aController == null)
aController = (Controller) getApplicationContext();

Log.i(TAG, "Received message");
String message = intent.getExtras().getString("price");

aController.displayMessageOnScreen(context, message);
// notifies user
generateNotification(context, message);
}

/**
* Method called on receiving a deleted message
* */
@Override
protected void onDeletedMessages(Context context, int total) {

if(aController == null)
aController = (Controller) getApplicationContext();

Log.i(TAG, "Received deleted messages notification");
String message = getString(R.string.gcm_deleted, total);
aController.displayMessageOnScreen(context, message);
// notifies user
generateNotification(context, message);
}

/**
* Method called on Error
* */
@Override
public void onError(Context context, String errorId) {

if(aController == null)
aController = (Controller) getApplicationContext();

Log.i(TAG, "Received error: " + errorId);
aController.displayMessageOnScreen(context,
getString(R.string.gcm_error, errorId));
}

@Override
protected boolean onRecoverableError(Context context, String errorId) {

if(aController == null)
aController = (Controller) getApplicationContext();

// log message
Log.i(TAG, "Received recoverable error: " + errorId);
aController.displayMessageOnScreen(context,
getString(R.string.gcm_recoverable_error,
errorId));
return super.onRecoverableError(context, errorId);
}

/**
* Create a notification to inform the user that server has sent a message.
*/
private static void generateNotification(Context context, String message) {

int icon = R.drawable.ic_launcher;
long when2 = System.currentTimeMillis();

Intent intent = new Intent(context, MainActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

NotificationCompat.Builder b = new NotificationCompat.Builder(context);

b.setAutoCancel(true)
.setDefaults(Notification.DEFAULT_ALL)
.setWhen(System.currentTimeMillis())
.setSmallIcon(icon)
.setTicker("Eduapp.in")
.setContentTitle("New Notification")
.setContentText(message)
.setDefaults(Notification.DEFAULT_LIGHTS| Notification.DEFAULT_SOUND)
.setContentIntent(contentIntent)
.setContentInfo("Eduapp.in");



//context, title, message, intent,icon, message, when
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(1, b.build());

}

}

最佳答案

您需要创建一个 session 来执行此操作。 session 将保留您首次登录时的详细信息,以便稍后返回应用程序时,用户名和密码已保存在应用程序中。这些显然嵌入在应用程序中,用户不可见。

我还会实现用户可以在下次使用应用程序时注销并重新输入他/她的凭据的想法,如果他们愿意的话。

Here是一个关于如何实现的很好的教程。

希望这有帮助:)

关于android - 登录成功后隐藏登录页面并在android中显示main_activity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33734276/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com