我的应用程序第1版几乎完成了,并且正在对其进行最后润色。但是,我在用户继续使用该应用程序之前会遇到一个对话框,要求用户接受EULA。
我将alertdogue调用放在OnCreate方法中。当应用程序首次打开或更新时,它们会显示一个带有拒绝按钮的模式警告框,效果很好。如果点击下降,则应用程序关闭;如果点击接受,则关闭对话框,并显示已经进行的初始活动。
我要做的是显示警报框(在oncreate中),然后在按下“接受”或“取消”按钮之前不加载其他任何东西。
我使用stop()和resume()吗?我迷路了。
肖恩·穆里根
答案 0 :(得分:0)
您几乎完全正确,唯一缺少的是:
1)在首选项中添加用户选择,以便万一用户选择接受,您将不会一遍又一遍地显示对话框。
2)具有“如果”条件,在该条件下,如果用户未接受该条款和条件,则根据首选项再次显示该对话框或调用触发导航,API等的所需方法。这也是用户第一次选择肯定选项从警报对话框的回调中调用所需的方法
答案 1 :(得分:0)
您可以在onCreate中进行尝试。
case R.id.dialog_button_accept:// ACCEPT
setContentView(R.layout.activity_main);
// do other things
break;
case R.id.dialog_button_cancel:// CANCEL
finish();// finish this activity
break;
答案 2 :(得分:0)
我有一个单独的类来显示Eula并生成和存储密钥。这是该类中的肯定和否定按钮的代码:
@Override
public void onClick(DialogInterface dialogInterface, int i) {
// Mark this version as read.
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean(eulaKey, true);
editor.commit();
dialogInterface.dismiss();
}
})
.setNegativeButton(android.R.string.cancel, new Dialog.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// Close the activity as they have declined the EULA
mActivity.finish();
}
});
这是活动主要OnCreate方法的代码
super.onCreate(savedInstanceState);
new SimpleEula(this).show();
setContentView(R.layout.activity_main);
//loading the default fragment
loadFragment(new HomeFragment());
总体目标是显示EULA,并暂停其余的onCreate,直到在EULA显示时已做出决定。因此,使用发布的解决方案,是否有办法恢复并保存正向按下的按钮,并将其传递回OnCreate,然后使用上面发布的解决方案中的switch语句?
答案 3 :(得分:0)
因此,我能够成功编辑所有代码,而当我启动它时,它只是变成黑色到白色。不知道我在这里做错了什么。
清单文件(想想这里的问题)
<activity android:name=".ShowEula">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
ShowEula是我创建的新类。
ShowEula
package com.app.restaurant.bowzers;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
public class ShowEula extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
new SimpleEula(this).show();
Intent intent2=new Intent(ShowEula.this,MainActivity.class);
startActivity(intent2);
}
}
与以前一样
new SimpleEula(this).show();
假设要加载“检查和/或显示Eula”。然后使用startActivity加载原始的MainActivity。
最终会产生一个闪烁的黑屏应用程序。
不确定我哪里出了错。
答案 4 :(得分:0)
SimpleEula.Java
package com.app.restaurant.bowzers;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.preference.PreferenceManager;
import android.view.View;
import static android.support.v4.content.ContextCompat.getSystemServiceName;
import static android.support.v4.content.ContextCompat.startActivity;
public class SimpleEula {
private String EULA_PREFIX = "eula_";
private Activity mActivity;
public SimpleEula(Activity context) {
mActivity = context;
}
private PackageInfo getPackageInfo() {
PackageInfo pi = null;
try {
pi = mActivity.getPackageManager().getPackageInfo(mActivity.getPackageName(), PackageManager.GET_ACTIVITIES);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return pi;
}
public void show() {
PackageInfo versionInfo = getPackageInfo();
// the eulaKey changes every time you increment the version number in the AndroidManifest.xml
final String eulaKey = EULA_PREFIX + versionInfo.versionCode;
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mActivity);
boolean hasBeenShown = prefs.getBoolean(eulaKey, false);
if(hasBeenShown == false){
// Show the Eula
String title = mActivity.getString(R.string.app_name) + " v" + versionInfo.versionName;
//Includes the updates as well so users know what changed.
String message = mActivity.getString(R.string.updates) + "\n\n" + mActivity.getString(R.string.eula);
AlertDialog.Builder builder = new AlertDialog.Builder(mActivity)
.setTitle(title)
.setMessage(message)
.setCancelable(false)
.setPositiveButton(android.R.string.ok, new Dialog.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
// Mark this version as read.
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean(eulaKey, true);
editor.commit();
dialogInterface.dismiss();
}
})
.setNegativeButton(android.R.string.cancel, new Dialog.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// Close the activity as they have declined the EULA
mActivity.finish();
}
});
builder.create().show();
}
}
}
Manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.app.restaurant.bowzers">
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:usesCleartextTraffic="true">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!--Maps Api Key-->
<meta-data android:name="com.google.android.geo.API_KEY" android:value="API_KEY_FOR_MAPS"/>
</application>
<uses-feature
android:required="true"
android:glEsVersion="0x00020000"/>
</manifest>
MainActivity.Java-MainActivity OnCreate方法
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
new SimpleEula(this).show();
setContentView(R.layout.activity_main);
//loading the default fragment
loadFragment(new HomeFragment());
//getting bottom navigation view and attaching the listener
BottomNavigationView navigation = findViewById(R.id.navigation);
navigation.setOnNavigationItemSelectedListener(this);
}
总体目标是阻止一切加载,直到他们同意EULA。就目前而言,这不是什么大问题,但是确实困扰着我,EULA确实会加载,但是在MODAL对话框的后面会加载初始片段,而不是白色背景,没有任何内容,也没有底部导航。 / p>