2013-12-25 3 views
2

Мы должны показать диалог лицензионного соглашения, когда пользователь использовать приложение в первый раз, теперь у меня есть два вопроса по этому поводу:показать лицензионное соглашение в андроиде приложения

-Где поставить этот диалог?

Добавить другое мероприятие или поместить диалоговое окно только на MainActivity, который является активностью запуска?

2 Как закрыть приложение, если пользователь попал «Отклонить»

После того, как пользователь нажал на кнопку «Отклонить», что означает, что он/она не согласен нашу лицензию, то мы должны выйти из приложения полностью. Как это сделать?


Согласно ответу «Ахмад», я решу, чтобы открыть диалоговое окно или нет в начале деятельности (onCreate метод):

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.map); 
    this.setupLicense(); 
    this.setupViews(); 
    this.initSomeJob(); 
} 

private void setupLicense() { 
    SharedPreferences setting = getSharedPreferences(IConstant.Map_License, 0); 
    boolean mapLicenseAccept = setting.getBoolean(IConstant.Map_License, false); 
    if (!mapLicenseAccept) { 
      //user does not accept the license yet, we will open the dialog 
     showDialog(Dialog_Map_License); 
    } 
} 
@Override 
protected Dialog onCreateDialog(int id) { 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    switch (id) { 
     case Dialog_Map_License: 
      builder.setIconAttribute(android.R.attr.alertDialogIcon) 
        .setTitle(R.string.map_license_title) 
        .setMessage(R.string.map_license_content) 
        .setPositiveButton(R.string.map_license_accept, new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int whichButton) { 
          //License accepted, persisted it. 
          SharedPreferences settings = getSharedPreferences(IConstant.Map_License, 0); 
          SharedPreferences.Editor editor = settings.edit(); 
          editor.putBoolean(IConstant.Map_License, true); 
          editor.commit(); 
         } 
        }) 
        .setNegativeButton(R.string.map_license_reject, new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int whichButton) { 
          //do nothing and exit 
          Process.killProcess(Process.myPid()); 
          System.exit(0); 
         } 
        }); 
      Dialog target = builder.create(); 
      target.setCanceledOnTouchOutside(false); 
      return target; 
    } 
    return null; 
} 

Но теперь я встретить два проблема:

1 Событие Я выбираю кнопку «Принять», как только я открою свое приложение во второй раз, откроется диалоговое окно.

кажется, что следующий код не работает:

      editor.putBoolean(IConstant.Map_License, true); 
          editor.commit(); 

2 Когда я показываю диалог, код:

this.setupViews(); 
this.initSomeJob(); 

все равно будет работать, они не заблокированы, которая из ожидается, так как ничего не должно быть сделано, прежде чем пользователь нажмет кнопку «Принять».

Любая идея исправить?

ответ

0

onCreateDialog устарел. Вместо этого используйте фрагмент диалога.Преимущество будет заключаться в том, что код для отображения диалогового окна будет перемещен из активности, а затем вы можете отображать диалог из любой активности. Кроме перемещения

SharedPreferences setting = getSharedPreferences(IConstant.Map_License, 0); 
boolean mapLicenseAccept = setting.getBoolean(IConstant.Map_License, false); 

к способу полезности как isLicenceAccepted и аналогично для хранения данных

SharedPreferences settings = getSharedPreferences(IConstant.Map_License, 0); 
SharedPreferences.Editor editor = settings.edit(); 
editor.putBoolean(IConstant.Map_License, true); 
editor.commit(); 

методу, как acceptLicence полезности. Вы можете найти, как сделать связь между диалогом Фрагмент и вашей деятельностью here. В вашем интерфейсе вместо onArticleSelected вам придется реализовать два метода onLicence и onLicenceRejected. Внедрение интерфейса в вашей деятельности переопределяет эти два метода и предпринимает соответствующие действия.

0

Куда разместить этот диалог?

В самом начале, когда пользователь впервые открывает приложение. Следите за этим, сохраняя его в общих настройках, если это диалоговое окно уже показано или нет. Для этого вам не нужно создавать отдельное действие. Вы могли бы, но большинство приложений, которые я видел там, нет.

Как закрыть приложение, если пользователь попал «Отклонить»

Просто закончить активность, а также сохранить, что в ваших общих предпочтений, а также. Поэтому каждый раз, когда пользователь открывает ваше приложение, вы проверяете погоду, значение boolean для «hasUserAcceptedOurAgreement» истинно или нет, и продолжайте в зависимости от этого.

Я отвечаю только с технической точки зрения, как это можно сделать надежно. Я не юрист, но, насколько мне известно, совершенно справедливо отправить свое лицензионное соглашение в игровой магазин, поэтому он доступен на странице приложений (Зачем еще этот вариант?).

+0

Ahmad, 1: Вы имеете в виду, что добавьте лицензионный диалог как часть «MainActivity» и отобразите или спрячете их соответственно? 2: Что вы подразумеваете под «завершением деятельности»? И «отправить лицензионное соглашение на игру в магазин» вы упомянули отлично, я попробую оба. :) – hguser

+0

: Я обновляю сообщение, вы можете проверить? – hguser

Смежные вопросы