Java Android应用程序在获取IMEI号码时崩溃
我有下面的类,它被设置为只获取设备idJava Android应用程序在获取IMEI号码时崩溃,java,android,telephonymanager,Java,Android,Telephonymanager,我有下面的类,它被设置为只获取设备id 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
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" />
我尝试通过访问另一个类的get_dev_id函数
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;
}
}
package com.example.common;
导入java.util.ArrayList;
导入java.util.List;
导入org.apache.http.HttpResponse;
导入org.apache.http.NameValuePair;
导入org.apache.http.client.HttpClient;
导入org.apache.http.client.entity.UrlEncodedFormEntity;
导入org.apache.http.client.methods.HttpPost;
导入org.apache.http.impl.client.DefaultHttpClient;
导入org.apache.http.message.BasicNameValuePair;
导入com.example.bootstart.IMEI;
导入android.os.AsyncTask;
导入android.util.Log;
公共类AsyncSendData扩展AsyncTask{
私有静态最终字符串LOGTAG=“SENDSERVER”;
@凌驾
受保护的布尔doInBackground(字符串…参数){
Log.i(LOGTAG,“函数调用”);
字符串url=params[0];//url。
字符串lati=参数[1];
字符串长度=参数[2];
字符串welawa=params[3];
HttpClient HttpClient=新的DefaultHttpClient();
//创建HTTP Post
HttpPost HttpPost=新的HttpPost(url);
// "http://www.domain.com/nv/maps/track_post");
//建筑柱参数
//键和值对
Log.i(LOGTAG,“在Imei之前”);
IMEI IMEI=新IMEI();
字符串imei_num=imei.get_dev_id();//*************imei在此处调用****
Log.i(LOGTAG,“在Imei之后”);
List nameValuePair=新的ArrayList(4);
添加(新的BasicNameValuePair(“imei”,imei_num));
添加(新的BasicNameValuePair(“welawa”,welawa));
添加(新的BasicNameValuePair(“lat”,lati));
添加(新的BasicNameValuePair(“long”,longi));
Log.i(LOGTAG,“名称值之后”);
试一试{
setEntity(新的UrlEncodedFormEntity(nameValuePair));
Log.i(LOGTAG,“响应后”);
HttpResponse response=httpClient.execute(httpPost);
Log.i(LOGTAG,“响应”+响应);
if(响应!=null){
返回响应.getStatusLine().getStatusCode()==200;
}
}捕获(例外e){
//
Log.e(LOGTAG,e.getMessage());
}
返回false;
}
}
日志不会在“log.i(LOGTAG,在Imei之前)”之后输出任何内容。
知道会发生什么吗
非常感谢您的帮助。//您需要将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);
编辑:
您可以改为使用静态。按照此操作获取您正在使用的android版本的imei编号?谢谢您的回复。我如何通过另一个类访问IMEI?我做了你建议的修改。它说“类型IMEI中的方法get_dev_id(Context)不适用于参数(AsyncSendData)”“从类的AsyncTask类型访问它有什么问题吗?实际上,设备IMEI号是常量,所以您可以在任何启动活动中获取该值,并在Asyn任务中传递该静态值。