2011-01-07 29 views
7

Tôi hiện đang có một đoạn mã trong ứng dụng Android của mình để chọn thiết bị IMEI và gửi IMEI đó làm tham số cho tập lệnh PHP được lưu trữ trên Internet.Gửi phản hồi từ PHP tới ứng dụng di động Android/Java?

Tập lệnh PHP sau đó lấy tham số IMEI và kiểm tra tệp để xem liệu IMEI có tồn tại trong tệp hay không, nếu tôi muốn có thể cho phép ứng dụng Android của tôi biết rằng IMEI tồn tại. Vì vậy, về cơ bản tôi chỉ muốn có thể trả lại True cho đơn đăng ký của mình.

Điều này có thể sử dụng PHP không?

Đây là mã của tôi cho đến nay:

Android/Java

//Test HTTP Get for PHP 

     public void executeHttpGet() throws Exception { 
      BufferedReader in = null; 
      try { 
       HttpClient client = new DefaultHttpClient(); 
       HttpGet request = new HttpGet(); 
       request.setURI(new URI("http://testsite.com/" + 
         "imei_script.php?imei=" + telManager.getDeviceId() 
         )); 
       HttpResponse response = client.execute(request); 
       in = new BufferedReader 
       (new InputStreamReader(response.getEntity().getContent())); 
       StringBuffer sb = new StringBuffer(""); 
       String line = ""; 
       String NL = System.getProperty("line.separator"); 
       while ((line = in.readLine()) != null) { 
        sb.append(line + NL); 
       } 
       in.close(); 
       String page = sb.toString(); 
       System.out.println(page); 
       } finally { 
       if (in != null) { 
        try { 
         in.close(); 
         } catch (IOException e) { 
         e.printStackTrace(); 
        } 
       } 
      } 
     } 

Trên đây gửi IMEI như một tham số để kịch bản PHP mà nhặt nó lên thành công và chạy một kiểm tra chống lại các tập tin thành công, tuy nhiên tôi neeed để sau đó có thể gửi một phản ứng tích cực trở lại từ kịch bản PHP nếu IMEI phù hợp với một trong các tập tin.

Đây là PHP:

<?php 
    // to return plain text 
    header("Content-Type: plain/text"); 
    $imei = $_GET["imei"]; 

    $file=fopen("imei.txt","r") or exit("Unable to open file!"); 

    while(!feof($file)) 
    { 
    if ($imei==chop(fgets($file))) 
    echo "True"; 
    } 

    fclose($file); 

?> 

Vì vậy, thay vì tiếng vang thật tôi muốn có thể để cho ứng dụng của tôi biết rằng IMEI đã được tìm thấy, có thể như vậy và nếu như vậy những gì tôi nên sử dụng để đạt được nó?

Trả lời

3

đây là nội dung hay! thực sự, bạn gần như ở đó. php của bạn không nên thay đổi, java của bạn nên! bạn chỉ cần kiểm tra kết quả của phản hồi bên trong mã java của bạn. redeclare phương pháp java của bạn là

sau đó, để phương thức này trả về trang biến.

bây giờ bạn có thể tạo phương thức trợ giúp ở đâu đó. nếu bạn đặt nó trong cùng một lớp như executeHttpGet, nó sẽ trông giống như sau:

public boolean imeiIsKnown(){ 
    return executeHttpGet().equals("True"); 
} 

bây giờ bạn có thể gọi phương pháp này để tìm hiểu xem imei của bạn có được biết đến trong phần cuối php của bạn hay không.

+1

hmm ... có lẽ phương thức imeiIsKnown sẽ trả về executeHttpGet(). StartsWith ("True"); hoặc có thể trả về executeHttpGet(). bằng ("True" + System.getProperty ("line.separator")); – davogotland

+0

Cảm ơn tôi đã xóa biến dòng mới để chỉ "True" được trả lại trong trang biến, cảm ơn. Bây giờ để bắt đầu nhìn vào hooking nó lên đến một cơ sở dữ liệu :) –

+0

giả sử trong kịch bản trên hỏi tôi đang ở cuối php và thiết bị Android đang kết nối với tôi và lấy một số phản ứng. Bây giờ là có bất kỳ cách nào mà tôi có thể chắc chắn rằng phản ứng đã đạt đến ứng dụng Android. – jishan

2

Tôi không chắc nó có tốt cho bạn hay không - nhưng bạn có thể sử dụng tiêu đề. Nếu IMEI được tìm thấy, bạn có thể gửi tiêu đề ("Trạng thái: HTTP/1.1 200 OK") nếu không gửi tiêu đề ("Trạng thái: 404 Không tìm thấy").

Và sau đó bạn nên kiểm tra trạng thái phản hồi trong ứng dụng của mình.

0

mã của bạn về cơ bản là âm thanh, tất cả những gì bạn cần làm là tinh chỉnh nó một chút. tôi trộn lẫn và kết hợp các câu trả lời ở trên, bởi vì tôi cần phải hoàn thành chính xác những gì bạn đang cố gắng. tôi tạo ra một cơ sở dữ liệu, thay vì kiểm tra các tập tin txt.

CREATE TABLE IF NOT EXISTS `user_device` (
    `Id_User_Device` int(11) NOT NULL auto_increment, 
    `Nr_User_Device` varchar(60) collate utf8_bin NOT NULL, 
    `Ic_User_Device_Satus` int(11) NOT NULL default '1', 
    PRIMARY KEY (`Id_User_Device`), 
    KEY `Nr_User_Device` (`Nr_User_Device`,`Ic_User_Device_Satus`) 
) 
ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=20 ; 

mã android java sẽ là (đừng quên tạo điều chỉnh thích hợp trong chính.xml file layout, chèn 2 yếu tố để một màn hình helloworld cổ điển:

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.net.URI; 
import org.apache.http.HttpResponse; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.impl.client.DefaultHttpClient; 
import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.TextView; 

public class ZdeltestEMEIActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     DeviceUuidFactory deviceUuidFactory = new DeviceUuidFactory(this); 
     String deviceUuid = deviceUuidFactory.getDeviceUuid().toString(); 
     Log.d("tgpost",deviceUuid); 
     try { 
      String webPostAnswer = deviceIdCheck(deviceUuid); 
      if (webPostAnswer != null) { 
       TextView tv1 = (TextView) findViewById(R.id.textdisplay01); 
       TextView tv2 = (TextView) findViewById(R.id.textdisplay02); 
       tv1.setText(webPostAnswer); 
       tv2.setText(deviceUuid); 
       Log.d("tgpost", "okok "+webPostAnswer); 
      } else { 
       Log.d("tgpost", "nono empty"); 
      } 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      Log.i("tgpost", "exc " + e.getMessage()); 
      Log.i("tgpost", e.toString()); 
      Log.e("tgpost", e.getStackTrace().toString()); 
      e.printStackTrace(); 
     }   
    } 
    public String deviceIdCheck(String deviceUuidIn) throws Exception { 
     boolean flagOK = false; 
     BufferedReader in = null; 
     try { 
      HttpClient client = new DefaultHttpClient(); 
      HttpGet request = new HttpGet(); 
      Log.v("tgpost", "okok"); 
      //"imei_script.php?deviceId="; + telManager.getDeviceId() 
      request.setURI(new URI("http://www.you.net/" + 
        "deviceIdCheck.php?deviceId=" + deviceUuidIn 
        )); 
      HttpResponse response = client.execute(request); 
      Log.d("tgpost", "php answered> "+response); 
      in = new BufferedReader 
      (new InputStreamReader(response.getEntity().getContent())); 
      StringBuffer sb = new StringBuffer(""); 
      String line = ""; 
      String NL = System.getProperty("line.separator"); 
      while ((line = in.readLine()) != null) { 
       sb.append(line + NL); 
      } 
      in.close(); 
      String page = sb.toString(); 
      Log.d("tgpost", "php answered HUMAN> "+page); 
      return page; 

     } catch (Exception e) { 
      return "problems with connection "+e.getMessage(); 
     } 
    } 
} 

với một lớp addtional

import android.content.Context; 
import android.content.SharedPreferences; 
import android.provider.Settings.Secure; 
import android.telephony.TelephonyManager; 
import java.io.UnsupportedEncodingException; 
import java.util.UUID; 

public class DeviceUuidFactory { 
    protected static final String PREFS_FILE = "device_id.xml"; 
    protected static final String PREFS_DEVICE_ID = "device_id";  
    protected static UUID uuid; 
    public DeviceUuidFactory(Context context) { 
     if(uuid ==null) { 
      synchronized (DeviceUuidFactory.class) { 
       if(uuid == null) { 
        final SharedPreferences prefs = context.getSharedPreferences(PREFS_FILE, 0); 
        final String id = prefs.getString(PREFS_DEVICE_ID, null); 
        if (id != null) { 
         // Use the ids previously computed and stored in the prefs file 
         uuid = UUID.fromString(id); 
        } else { 
         final String androidId = Secure.getString(context.getContentResolver(), Secure.ANDROID_ID); 

         // Use the Android ID unless it's broken, in which case fallback on deviceId, 
         // unless it's not available, then fallback on a random number which we store 
         // to a prefs file 
         try { 
          if (!"9774d56d682e549c".equals(androidId)) { 
           uuid = UUID.nameUUIDFromBytes(androidId.getBytes("utf8")); 
          } else { 
           final String deviceId = ((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE)).getDeviceId(); 
           uuid = deviceId!=null ? UUID.nameUUIDFromBytes(deviceId.getBytes("utf8")) : UUID.randomUUID(); 
          } 
         } catch (UnsupportedEncodingException e) { 
          throw new RuntimeException(e); 
         } 

         // Write the value out to the prefs file 
         prefs.edit().putString(PREFS_DEVICE_ID, uuid.toString()).commit(); 

        } 

       } 
      } 
     } 

    } 


    /** 
    * Returns a unique UUID for the current android device. As with all UUIDs, this unique ID is "very highly likely" 
    * to be unique across all Android devices. Much more so than ANDROID_ID is. 
    * 
    * The UUID is generated by using ANDROID_ID as the base key if appropriate, falling back on 
    * TelephonyManager.getDeviceID() if ANDROID_ID is known to be incorrect, and finally falling back 
    * on a random UUID that's persisted to SharedPreferences if getDeviceID() does not return a 
    * usable value. 
    * 
    * In some rare circumstances, this ID may change. In particular, if the device is factory reset a new device ID 
    * may be generated. In addition, if a user upgrades their phone from certain buggy implementations of Android 2.2 
    * to a newer, non-buggy version of Android, the device ID may change. Or, if a user uninstalls your app on 
    * a device that has neither a proper Android ID nor a Device ID, this ID may change on reinstallation. 
    * 
    * Note that if the code falls back on using TelephonyManager.getDeviceId(), the resulting ID will NOT 
    * change after a factory reset. Something to be aware of. 
    * 
    * Works around a bug in Android 2.2 for many devices when using ANDROID_ID directly. 
    * 
    * @see http://code.google.com/p/android/issues/detail?id=10603 
    * 
    * @return a UUID that may be used to uniquely identify your device for most purposes. 
    */ 
    public UUID getDeviceUuid() { 
     return uuid; 
    } 
} 

ở phía bên php:

<?php 
// to return plain text 
// header("Content-Type: plain/text"); 
include('/home/public_html/ConnStrDB.php'); 
$deviceId = $_GET["deviceId"]; 
$sql = "SELECT Nr_User_Device FROM user_device WHERE Nr_User_Device = '".$deviceId."'"; 
$result = mysql_query($sql); 
if ($result) { 
    $row = mysql_fetch_array($result); 
    if ($row[0]) {$deviceIdFile = $row[0];} else {$deviceIdFile = "device not found";} 
} else { 
    $deviceIdFile = "no check was made, empty set"; 
} 
echo $_GET["deviceId"]." ".$deviceIdFile; 
?> 

và (do đó bạn không có để chèn các số bằng tay (chỉ cần thay đổi tên tệp php trong quá trình gửi):

<?php 
// to return plain text 
// header("Content-Type: plain/text"); 
include('/home/public_html/ConnStrDB.php'); 
$deviceId = $_GET["deviceId"]; 
$sql = "SELECT Nr_User_Device, Ic_User_Device_Status FROM user_device WHERE Nr_User_Device = ".$deviceId; 

$sql = "INSERT INTO user_device (Nr_User_Device) VALUES ('".$deviceId."')"; 
$result = mysql_query($sql); 
if ($result) { 
    $deviceIdFile = "device inserted"; 
} else { 
    $deviceIdFile = "not inserted"; 
} 
echo $_GET["deviceId"]." ".$deviceIdFile; 
?> 

nếu thành công, màn hình thiết bị di động của bạn sẽ hiển thị imei 3 lần (thiết bị trên thiết bị, thiết bị nhận được trong php và được nhận trên cơ sở dữ liệu).

ConnStrDB.php là một tệp có chứa kết nối hoàn chỉnh của bạn với cơ sở dữ liệu MySQL.

nếu bạn trả lời bằng văn bản dài, ứng dụng android sẽ nhận được nó, cũng như phiên bản tiết của bất kỳ cảnh báo php nào. nếu bạn không cần json, bạn có thể trả lời bất kỳ xml thông qua một tiếng vang php. thanx cho câu hỏi của bạn, rất hữu ích! và thanx cho các câu trả lời EXCELLENT!

Các vấn đề liên quan