【发布时间】:2017-12-22 15:13:30
【问题描述】:
目前,我正在尝试构建一个 QR 码扫描仪,它可以扫描 QR 码并同时获取单元格的设备 ID,然后最终将其发布到服务器
我经常收到错误“呼叫需要权限,可能会被用户拒绝”
在 manifest.xml 中,我已经包含了<uses-permission android:name="android.permission.READ_PHONE_STATE" />
我还尝试将 android SDK 23 降级回 22。
另外,这里的答案似乎都不能解决我的问题。有什么想法吗?
public class MainActivity extends AppCompatActivity {
private static final String LOG_TAG = MainActivity.class.getSimpleName();
private static final int BARCODE_READER_REQUEST_CODE = 1;
public TelephonyManager tel;
public TextView imei;
private TextView mResultTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mResultTextView = (TextView) findViewById(R.id.result_textview);
Button scanBarcodeButton = (Button)
findViewById(R.id.scan_barcode_button);
scanBarcodeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(getApplicationContext(),
BarcodeCaptureActivity.class);
startActivityForResult(intent, BARCODE_READER_REQUEST_CODE);
}
});
}
private class OkHttpAync extends AsyncTask<Object, Void, Object> {
private String TAG = MainActivity.OkHttpAync.class.getSimpleName();
private Context contx;
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Object doInBackground(Object... params) {
contx = (Context) params[0];
String requestType = (String) params[1];
String requestParam = (String) params[2];
Log.e(TAG, "processing http request in async task");
if ("post".equals(requestType)) {
Log.e(TAG, "processing post http request using OkHttp");
postHttpResponse(requestParam);
}
return null;
}
@Override
protected void onPostExecute(Object result) {
super.onPostExecute(result);
/*
if (result != null) {
Log.e(TAG, "populate UI after response from service using OkHttp
client");
respone.setText((String) result);
}
*/
}
}
public void postHttpResponse(String requestParam) {
OkHttpClient httpClient = new OkHttpClient();
String url = "https://requestb.in/1k1hm5y1";
RequestBody formBody = new FormBody.Builder()
// .add("employeeid",userData )
//.add("imie",userData2)
.add("qrcode",requestParam)
.build();
Request request = new Request.Builder()
.url(url)
.post(formBody)
.build();
Response response = null;
try{
response = httpClient.newCall(request).execute();
}
catch (IOException e) {
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
// GET DEVICE ID
TelephonyManager tManager = (TelephonyManager) getBaseContext()
.getSystemService(Context.TELEPHONY_SERVICE);
String deviceIMEI = tManager.getDeviceId();
if (requestCode == BARCODE_READER_REQUEST_CODE) {
if (resultCode == CommonStatusCodes.SUCCESS) {
if (data != null) {
Barcode barcode =
data.getParcelableExtra(BarcodeCaptureActivity.BarcodeObject);
Point[] p = barcode.cornerPoints;
//display scan bar code value
mResultTextView.setText(barcode.displayValue);
new MainActivity.OkHttpAync().execute(this,
"post",barcode.displayValue + 33 );
} else mResultTextView.setText(R.string.no_barcode_captured);
} else Log.e(LOG_TAG,
String.format(getString(R.string.barcode_error_format),
CommonStatusCodes.getStatusCodeString(resultCode)));
} else super.onActivityResult(requestCode, resultCode, data);
}
}
【问题讨论】: