2012-02-19 169 views
8

我已经构建了我的第一个应用程序,我想密码保护它。将密码存储在Java文件中并且该方法需要尽可能简单,因为我在这个应用程序之前没有java甚至xml的经验。我有过几次尝试,但都失败了,所以我希望有人能帮助我。密码保护我的Android应用程序(简单的方式)

我曾与一个EditText字段中创建的布局:

<EditText 
android:id="@+id/passwordedittext" 
android:layout_width="200dp" 
android:layout_height="50dp" 
android:inputType="textPassword" 
android:layout_marginTop="40dp" 
android:layout_marginLeft="20dp"> 
<requestFocus /> 

和一个提交按钮:

<Button 
android:id="@+id/submitbutton" 
android:layout_width="50dp" 
android:layout_height="50dp" 
android:layout_marginTop="40dp" 
android:background="@drawable/bgo" 
android:clickable="true" 
android:layout_gravity="right|center_horizontal" 
android:layout_marginRight="20dp"/> 

Java文件:

package com.berry; 
import android.app.Activity; 
import android.content.Intent; 
import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.view.View; 
import android.view.Window; 
import android.view.WindowManager; 
import android.widget.Button; 
import android.widget.EditText; 


public class password extends Activity{ 

MediaPlayer mpbuttonclick; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN,WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); 

    setContentView(R.layout.password); 

    mpbuttonclick = MediaPlayer.create(this, R.raw.keypress); 

    Button sumbitButton = (Button) findViewById(R.id.submitbutton); 
    sumbitButton.setOnClickListener(new View.OnClickListener() {   
     public void onClick(View v){ 
     EditText passwordEditText = (EditText) findViewById(R.id.passwordedittext); 
        if(passwordEditText.getText().toString()=="MyPasswordHere"){ 
         startActivity(new Intent("com.berry.intro")); 
         mpbuttonclick.start(); 


        }}}); 
    }} 

回答

12

这部分:

if(passwordEditText.getText().toString()=="MyPasswordHere") 

不正确。它应该是

if(passwordEditText.getText().toString().equals("MyPasswordHere")) 

当比较基本数据类型(如intcharboolean),可以使用==!=
当比较对象(如StringCar等),你需要使用.equals()方法。

See also this page.

+0

谢谢你做的窍门! – SuperKombol 2012-02-19 17:32:15

-6

在编辑文本字段XML可以添加

android:password="true" 
+1

使用此标志将通过使编辑文本具有密码点而不是显示实际字符来改进您的应用程序,但此标志不会解决您遇到的问题。 – 2012-02-19 16:21:48

+0

编辑文本框无论如何都显示点,因为inputtype已被定义为xml中的textpassword。谢谢。 – SuperKombol 2012-02-20 17:20:36

9

这是没有办法的安全检查密码这样。

有几种方法可以轻松地绕过你的代码

  1. 直接从其他应用程序

  2. 调用活动读拆卸smali code找回密码

  3. 修改代码使用smali总是跳入代码块

  4. 可用来解决这些问题个

解决方案:

  1. 暗纹代码(最坏的选择,但可能足以在大多数情况下)

  2. Hashed Password比较:安全得多。但应该是一个盐渍哈希。 (There is also a more simple to understand explaination for the implementation)

  3. Use a HTTP Request到您的服务器以隐藏密码检查背后的机制。(但这需要你的应用程序要求网络权限)

+1

嗯,因为Java中的提问者很弱,我会推荐解决方案2,它可以像这样实现:'SHA1.Sha1Hash(passwordGoesHere);' – 2012-02-19 16:25:34

+1

感谢您的提示,我添加了一个链接来解决这个问题。 – devsnd 2012-02-19 16:37:54

+0

感谢您的建议,我会研究您的解决方案,以便在构建更实质性的东西时获得。 – SuperKombol 2012-02-19 17:36:49