2017-12-21 5 views
0

現在、私はQRコードをスキャンするQRコードスキャナーを構築しようとしていますが、同時にサーバーのデバイスIDを取得して、最終的にサーバーに送信します。エラーを解決するには "ユーザーが拒否する可能性があるアクセス許可が必要です"というエラーを解決するにはどうすればよいですか?

私はいつも "callユーザー」番目のmanifest.xmlで

によって拒否することができる権限を必要とし、私はすでに私も22

Plusに戻って、答えのいずれも、ここをアンドロイドSDK 23をダウングレードしようとし<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 含まれています私の問題を解決するようです。何か案は?

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); 
    } 
    } 
+1

で[コールの可能性の重複は、ユーザーによって拒否することができる権限が必要です](https://stackoverflow.com/questions/33327984/call-requires-permissions-that-may-be-rejected-by-user) –

答えて

0

READ_PHONE_STATE許可がdangerousであり、あなたは、実行時にそれを要求する必要があります。このGoogle Guideをご覧ください。

私は許可を要求するのは簡単のために、このPermissionsDispatcher Libraryを使用することをお勧め:

@NeedsPermission(Manifest.permission.READ_PHONE_STATE) 
void readPhoneState() { 
    // do any thing here 
} 


@OnPermissionDenied(Manifest.permission.READ_PHONE_STATE) 
    void showDeniedForPhoneState() { 

    } 
0

はほとんどここにすべての答えを試みたが、22 にSDKのバージョンを変更することによって、この作品は、それが、この問題のつまずき誰にもお役に立てば幸いです

のAndroidManifest.xml

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 22 
    buildToolsVersion '22.0.2' 

    defaultConfig { 
     applicationId "com.varvet.barcodereadersample" 
     minSdkVersion 19 
     targetSdkVersion 22 
     versionCode 1 
     versionName "1.0" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    testCompile 'junit:junit:4.12' 
    compile 'com.android.support:appcompat-v7:22.1.0' 
    compile 'com.google.android.gms:play-services-vision:11.6.0' 
    compile 'com.squareup.okhttp3:okhttp:3.3.1' 
} 
関連する問題