2014-01-29 58 views
1

我有下面的類,它只被設置爲獲取設備ID。獲取IMEI號碼時Android應用程序崩潰

package com.example.bootstart; 


import android.app.Activity; 
import android.content.Context; 
import android.telephony.TelephonyManager; 

public class IMEI extends Activity { 
    public String get_dev_id(){ 

     //Getting the Object of TelephonyManager 
     TelephonyManager tManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); 

     //Getting IMEI Number of Devide 
     String Imei=tManager.getDeviceId(); 

     return Imei; 
    } 
} 

我在我的清單中有以下權限集。

<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 

我嘗試通過

package com.example.common; 

import java.util.ArrayList; 
import java.util.List; 

import org.apache.http.HttpResponse; 
import org.apache.http.NameValuePair; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.entity.UrlEncodedFormEntity; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.message.BasicNameValuePair; 

import com.example.bootstart.IMEI; 

import android.os.AsyncTask; 
import android.util.Log; 

public class AsyncSendData extends AsyncTask<String, Void, Boolean> { 

    private static final String LOGTAG = "SENDSERVER"; 

    @Override 
    protected Boolean doInBackground(String... params) { 
     Log.i(LOGTAG, "FUNction Called"); 
     String url = params[0]; // URL. 
     String lati = params[1]; 
     String longi = params[2]; 
     String welawa = params[3]; 

     HttpClient httpClient = new DefaultHttpClient(); 
     // Creating HTTP Post 
     HttpPost httpPost = new HttpPost(url); 
//    "http://www.domain.com/nv/maps/track_post"); 

     // Building post parameters 
     // key and value pair 
     Log.i(LOGTAG, "Before Imei"); 
     IMEI imei = new IMEI(); 
     String imei_num = imei.get_dev_id(); //***************IMEI Called Here**** 
     Log.i(LOGTAG, "After Imei"); 

     List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(4); 
     nameValuePair.add(new BasicNameValuePair("imei", imei_num)); 
     nameValuePair.add(new BasicNameValuePair("welawa", welawa)); 
     nameValuePair.add(new BasicNameValuePair("lat", lati)); 
     nameValuePair.add(new BasicNameValuePair("long", longi)); 
     Log.i(LOGTAG, "After Name Value"); 
     try { 
      httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair)); 
      Log.i(LOGTAG, "After Response"); 
      HttpResponse response = httpClient.execute(httpPost); 
      Log.i(LOGTAG, "Response " + response); 
      if (response != null) { 
       return response.getStatusLine().getStatusCode() == 200; 
      } 
     } catch (Exception e) { 
      // 
      Log.e(LOGTAG, e.getMessage()); 
     } 
     return false; 
    } 

} 

日誌從另一個類訪問get_dev_id功能不把任何出 「Log.i(LOGTAG, 」維明之前「)後放;」。 關於可能會發生什麼的任何想法?

非常感謝您的幫助。

+0

按照這個來獲取imei數http://stackoverflow.com/a/3009341/9 42224 –

+0

你正在使用哪個android版本? – user3243163

回答

1

//你需要的IMEI活動改爲類

public static class IMEI { 

    public static String get_dev_id(Context ctx){ 

     //Getting the Object of TelephonyManager 
     TelephonyManager tManager = (TelephonyManager)ctx.getSystemService(Context.TELEPHONY_SERVICE); 

     //Getting IMEI Number of Devide 
     String Imei=tManager.getDeviceId(); 

     return Imei; 
    } 
} 

//你需要

String imei_num = IMEI.get_dev_id(context); 

編輯來稱呼它:

您可以使用靜態相反..

+0

感謝您的回覆。我將如何通過其他課程訪問我的IMEI?我做了你的建議修改。它說「IMEI類型中的方法get_dev_id(Context)不適用於參數(AsyncSendData)」 –

+0

從AsyncTask類訪問此類是否有任何問題? –

+0

實際上設備的IMEI號碼是不變的,所以你可以在任何你的開始活動中獲得這個數字,並在你的Asyn任務中傳遞這個靜態值。 –