I write an application, I want to get a phone number, but getline1number() not working on any devices.
So, I want to create a pop-up to enter a phone number and submit to save and don't show in next time open app.
Like this:
You can always use SharedPreferences to do such things:
SharedPreferences sp = getSharedPreferences("FirstTimeFile", Context.MODE_PRIVATE);
/**
* when the app is opened for the first time, no such variable
* (appIsOpenedForTheFirstTime) exists. So, it becomes true.
*/
boolean appIsOpenedForTheFirstTime = sp.getBoolean("IsAppOpenedForFirstTime",true);
//since it is true, it will be set to false after the execution of following block:
if(appIsOpenedForTheFirstTime) {
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean("IsAppOpenedForFirstTime", false);
editor.commit();
//PUT THE CODE FOR YOUR POPUP HERE
}
As the SharedPreferences values remain in the application data even after you close the app, so the next time you open the app, the value of appIsOpenedForTheFirstTime will be false and hence your pop-up code won't be executed.
Ah, as a side-note, if you clear the app data, everything gets cleared - including the SharedPreferences. Read this official article for in-depth understanding.
Related
I'm developing an mobile where the walkthrough page about the application should appear only once the application is installed. Can anyone help me resolving this issue with a clear example.
Add the following code in your method:
SharedPreferences prefs = getSharedPreferences(PREFERENCES_NAME, MODE_PRIVATE);
// Default value returned by next line is true.
boolean firstLaunch = prefs.getBoolean("firstLaunch", true);
if (firstLaunch) {
// Do whatever you want here. This will be called only the first time the app launches.
// Then edit the SharedPreferences and put the value as false. Unless changed back to true, this if statement/loop will never be called again.
prefs.edit().putBoolean("firstLaunch", false).apply();
}
Note: PREFERENCES_NAME is just a String. It can be anything. I suggest you use the same PREFERENCES_NAME in all of your app, in case you need to access SharedPreferences somewhere else.
I am trying to develop an app that requires certain values to be set by the users at the app's first startup only, because i don't wanna bother them frequently inputting the values everytime they launch the app. My app has a single activity main and uses certain values that are inputted by the users at first startup. How can I make this possible.
Please explain me elaborately . :-)
You should use SharedPreferences to keep a track of the first use.
In the onCreate Method of your Activity (Startup activity), you could do something like this,
SharedPreferences userPrefs = getSharedPreferences("UserPrefs", 0);
Boolean firstUse = userPrefs.getBoolean("firstUse", true);
if(firstUse){
//this implies it is the first use of the app
//also once you are done implementing the logic for first use you need to put firstUse as true
SharedPreferences.Editor editor = userPrefs.edit();
editor.putBoolean("firstUse", false);
editor.commit();
}
else{
//take the user directly inside the app
}
Also, if you plan to save user information in the first use, look at different ways of storing data here.
show the alert initially and after getting the input values keep it in preference and next time check whether the required values existing or not. If it is already there avoid popup
For getting more information about shared preference check this link http://www.vogella.com/tutorials/AndroidFileBasedPersistence/article.html
preferences_statusFirst.getString("boot", "");
if (status.length() <= 0)
{
showDialog(DIALOG_birth);
editor_boot.putString("boot", "1");
editor_boot.commit();
}
else
{
}
}
I am new to Android App development.I have a small issue.Working on my Android Application suddenly hit "Home" Button so it goes to background after some time again go to "Home" and click my app icon it again getting started from my first screen instead of this i have keep the last viewed Activity and should show message like "Your Session timed out So Please Loging again the box with two EditText boxes" Then check the credentials and Allow the user to continue or redirect to Login Screen.How to achieve this.
Thanks in advance..
Its simple in Android. you need to maintain SharedPreferences.
Read this for better understanding of the concept.
This will work as
==> when ever you are trying to maintain login concept save user name in the sharedpreference.
==> once data is edited in prefernces.xml , the data in it can be check in any Activity.
For example, to save username, password and session ID, you can:
SharedPreferences pref = myContexy.getSharedPreferences("Session Data", MODE_PRIVATE);
SharedPreferences.Editor edit = pref.edit();
edit.putString("User Name", username);
edit.putString("Password", password);
edit.putInt("Session ID", session_id);
edit.commit();
and get them
SharedPreferences pref = myContexy.getSharedPreferences("Session Data", MODE_PRIVATE);
username = pref.getString("User Name", "");
password = pref.getString("Password", "");
session_id = pref.getInt("Session ID", 0);
SharedPreferences is definately the way to go, but to go into more detail for the timeout:
Save the current timestamp in onPause() (-> SharedPreferences)
Then in onResume() compare it, to check for a timeout
If you did not time-out just continue, otherwise show that nice screen, simply logout, self-destruct the device, or whatever you would like to do in that case :-)
Also you might consider implementing some kind of session manager class, to handle it on a higher level:
Nice example/tutorial from android hive
See this diagram for an explanation of the Activity lifecycle: http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle
Override the appropriate methods in your activity to keep track of when it loses/regains focus.
If you want to maintain the user login session then instead of having the preference in all the activities we can have handler inplace to do this.
Create Handler after the user logsin
Set sendMessageAtTime(Message, long), long is millisecond value. This will call the logout function that defined.
i want to force use to fill Settings Page in two cases
1) when user first launch Application
2) when database version is change i want that setting page should be filled first before proceding
in my Setting class i set shared preferences "false" , and then i check it in below code
class setting //main class
String flag = sharedPreferences.getString("CreatedFlag","");
if(flag.equals("true"))
{
// Move to second activity
Intent i =new Intent();
i.setClass(someclass.this,otherPage.class );
startActivity(i);
finish();
}
else
{ // Stay on Settings page }
Problem : it run fine when user first launch application ,it show setting page and fill tht page ,
but when user run application second time it show setting page again ,coz shared preference still have true value ,
thn again user run app 3rd time Shared Preference have update value which is false ,and show other page
what i want is tht Setting page show only once if its there is no setting define ,other wise it goes to home page
need help ,
I dont shee here where you're actually saving the preferences, I assume its in the otherPage activity??
If not add this to the first activity
SharedPreferences prefs = this.getsharedPreferences("myApp",0);
//check for the Created value in the shared preferences
String createdFlag = prefs.getString("Created","false"); // set default value == false
if(createdFlag == "false){
goToSettingsPage(); // to the settings page we go...
}
Then on your settings page:
SharedPreferences prefs = this.getSharedPreferences("myApp",0);
SharedPreferences.Editor ed = prefs.edit(); // create the editor
ed.putString("Created","true"); // put the value to the prefs
ed.commit(); // commit the changes
After the first run, the shared prefs file will be persisted, and then should not goto the settings page the second time its run.
OK, so I'm playing around with an android app.
The 90% use case is that users want to go straight to the primary list screen to find what they're looking for. That's what I want as my default screen.
The first time a user loads the app however, some configuration is required before their list screen is of any value to them.
So my question, is how I can go about displaying the configuration activity the first time the app is opened up, and then the list screen for future openings.
I also want to put a demo button on the configuration screen, so I suppose more than just detecting that it's the first time, I specifically want to detect whether the user has performed certain configurations within the first screen.
After the first time the user has loaded the app you could store the details of whether user has performed the configurations in SharedPreferences.
protected void storeSharedPrefs(String value) {
/*
* Storing in Shared Preferences
*/
editor.putString("first", value);
editor.commit(); //Commiting changes
}
Check each on time application is loaded, whether its the first time and configuration details has been entered correctly by checking SharedPreferences
private boolean first_time_check() {
/*
* Checking Shared Preferences if the user had pressed
* the remember me button last time he logged in
* */
String first = uPreferences.getString("first", null);
if((first == null)){
return false;
}
else
return true;
}
i like dweebsonduty's method. a similar way to do this is to save their configuration information in files on the SD card. your app could start out by checking for those files and loading the information. if the load is successful, it moves on to the next activity, if not it starts the appropriate activity to prompt the user for input.
I have done this same thing, but instead of swiching activities i just switch views until i have all the info i need, and then move on.
Many applications actually store the current version in SharedPreferences, and check against it for if an update has been installed. Its a clever way of achieving a "what's changed" popup, or making sure that some settings get set (I would be wary of just having a boolean flag because if you ever want to add an additional setting, you will need a second flag and it gets messy after the third, etc.).
String VersionValue = "v.1.0";
final String PREFS_NAME = "MyPrefsFile";
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
if (settings.getBoolean(VersionValue, true)) {
//the app is being launched for first time, do something
NewDialogFragment newFragment = new NewDialogFragment();
newFragment.show(getFragmentManager(), "New");
// record the fact that the app has been started at least once
settings.edit().putBoolean(VersionValue, false).commit();
}
You could do it this way and still get the same result I tried it its a small workaround if u do not fully understand how to check if the app is updated. Instead with this code you can just simply change the String VersoinValue to your current app version and android will think the app is a new first time app and will only display the code u wrote once until you change VersionValue on your next update. (:
How will you be storing the configuration?
If it is in SQLlite you could just create a table called firstuse and put a field in there called hasbeenused and make it null. Then when the app is used you can put a 1 in there. Then you can read it each time your app loads and if that field = 1 then go to your next activity.