2017-08-07 61 views
-2

我有我的代碼的問題
我創建了一個警告對話框,有2項 其中之一導入從畫廊,工作圖像沒有問題 ,另一種是爲拍照帶相機 ,我不知道什麼是真正的問題 這裏是我的活動代碼:圖片選擇器問題23

AlertDialog.Builder builder = new AlertDialog.Builder(NewAdActivity.this); 
    builder.setAdapter(new ArrayAdapter<String>(NewAdActivity.this, R.layout.row, R.id.mytext, list), new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialogInterface, int i) { 
      if (i == 0) {//gallery 

       Intent gallery_intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
       startActivityForResult(Intent.createChooser(gallery_intent, "لطفا یک عکس را انتخاب کنید"), 2); 

      } else {//camera 

       Intent camera_intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
       File file = new File(Environment.getExternalStorageDirectory(),"file"+String.valueOf(System.currentTimeMillis()+".jpg")); 

       Uri uri = Uri.fromFile(file); 
       camera_intent.putExtra(MediaStore.EXTRA_OUTPUT,uri); 
       camera_intent.putExtra("return-data",true); 
       startActivityForResult(camera_intent,1); 

      } 

,我也加入權限 這裏是日誌貓:

致命異常:主 工藝:nr.nima.sheypor,PID:17556 java.lang.SecurityException異常:權限拒絕:啓動意圖{ ACT = android.media.action.IMAGE_CAPTURE FLG = 0x3 CMP = com.sec .android.app.camera/.Camera clip = {text/uri-list U:file:///storage/emulated/0/file1502095189530.jpg}(附加組件)} from ProcessRecord {1839049 17556:nr.nima .sheypor/u0a833}(pid = 17556, uid = 10833)with android.permission.CAMERA at android.os.Parcel.readException(Parcel.java:1620) at android.os.Parcel.readException(Parcel .java:1573) at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:3130) 在 android.app.Instrumentation.execStartActivity(Instrumentation.java:1541) 在android.app.Activity.startActivityForResult(Activity.java:4284) 在 android.support.v4.app.BaseFragmentActivityJB.startActivityForResult(BaseFragmentActivityJB.java:48) 在 android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:75) 在android.app.Activity.startActivityForResult( Activity.java:4231) at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActi vity.java:856) at nr.nima.sheypor.NewAdActivity $ 6.onClick(NewAdActivity.java:176) at android.support.v7.app.AlertController $ AlertParams $ 3.onItemClick(AlertController.java:959) 在android.widget.AbsListView $ PerformClick.run(AbsListView.java:3827) (android.widget.AbsListView.performItemClick(AbsListView.java:1547) )在android.widget.AbsListView $ 3.run(AbsListView.java:5849) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:7223) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1230) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

回答

0

開始在安卓6.0 (API級別23),用戶在應用程序運行時爲應用程序授予權限。

要檢查是否授予許可的呼叫:

private Boolean hasPermissionCamera() { 
boolean hasPermission = (ContextCompat.checkSelfPermission(CamActivity.this, 
     Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED); 

return hasPermission; 

}

您可以檢查存儲許可改變Manifest.permission.CAMERA與權限找你詢問

做同樣的

編輯

我整合了你的代碼 selectedIdTV的OnClick是點擊一個按鈕 你可以打電話從您用來打電話給你的警告建設者

試試這個

private Boolean hasPermissionCamera() { 
    boolean hasPermission = (ContextCompat.checkSelfPermission(StartActivity.this, 
      Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED); 

    return hasPermission; 

} 
AlertDialog mSelectDialog; 
public void selectedIdTVOnClick(View view) { 

    AlertDialog.Builder builder = new AlertDialog.Builder(StartActivity.this); 
    final String[] LIST_TYPES_ITEMS = Arrays.asList("0", "1").toArray(new String[] {}); 
    builder.setSingleChoiceItems(LIST_TYPES_ITEMS, -1, new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int item) { 

      if (item == 0) {//gallery 

       Intent gallery_intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
       startActivityForResult(Intent.createChooser(gallery_intent, "لطفا یک عکس را انتخاب کنید"), 2); 

      } else {//camera 

       if(hasPermissionCamera()){ 
        startCamera(); 
       }else { 
        initaskPermission(); 
       } 


      } 
     } 

    }); 
    mSelectDialog = builder.create(); 
    mSelectDialog.show(); 

} 


private static final int REQUEST_ID_MULTIPLE_PERMISSIONS = 1; 

private void initaskPermission() { 
    List<String> listPermissionsNeeded = new ArrayList<>(); 

    if (!hasPermissionCamera()) { 
     listPermissionsNeeded.add(Manifest.permission.CAMERA); 
    } 
    if (!listPermissionsNeeded.isEmpty()) { 
     ActivityCompat.requestPermissions(this, listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]), REQUEST_ID_MULTIPLE_PERMISSIONS); 

    } 
} 

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    switch (requestCode) { 
     case REQUEST_ID_MULTIPLE_PERMISSIONS: { 

      Map<String, Integer> perms = new HashMap<>(); 
      // Initialize the map with both permissions 
      perms.put(Manifest.permission.CAMERA, PackageManager.PERMISSION_GRANTED); 

      // Fill with actual results from user 
      if (grantResults.length > 0) { 
       for (int i = 0; i < permissions.length; i++) 
        perms.put(permissions[i], grantResults[i]); 

       if (perms.get(Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) { 
        Log.d(TAG, "sms & location services permission granted"); 

        startCamera(); 

       } else { 

    //Permission denied 
    // Display a toast or recall initAskPermission 
       } 
      } 
     } 
    } 

} 

private void startCamera() { 
    Intent camera_intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    File file = new File(Environment.getExternalStorageDirectory(),"file"+String.valueOf(System.currentTimeMillis()+".jpg")); 

    Uri uri = Uri.fromFile(file); 
    camera_intent.putExtra(MediaStore.EXTRA_OUTPUT,uri); 
    camera_intent.putExtra("return-data",true); 
    startActivityForResult(camera_intent,1); 
} 
+0

我做到了,但仍然有問題,並且應用程序崩潰wheni像以前那樣點擊警告對話框項目。 – user7347049

+0

嘗試新的編輯 – sansa

+0

TNX,但它沒有工作.. – user7347049