2017-02-05 2 views
1

У меня есть код для действия вызова и мне нужен лучший способ заявить о время выполнения разрешения Ive пытались много кодов, но я всегда получаю ошибкуандроид разрешения запроса во время выполнения для вызова действия

вот мой основной код любое предложения для заставить его работать с разрешения выполнения заранее спасибо

public class MainActivity extends Activity { 

private Button button; 
private EditText etPhoneno; 

public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    button = (Button) findViewById(R.id.buttonCall); 
    etPhoneno = (EditText) findViewById(R.id.editText1); 
    // add button listener 
    button.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
       String phnum = etPhoneno.getText().toString(); 
       Intent callIntent = new Intent(Intent.ACTION_CALL); 
       callIntent.setData(Uri.parse("tel:" + phnum)); 
       startActivity(callIntent); 
     } 
    }); 
} 

}

+1

Что такое ошибка? –

ответ

7

Попробуйте этот код в методе onClick()

if(isPermissionGranted()){ 
    call_action(); 
} 

Теперь, чтобы позвонить создать отдельный метод:

public void call_action(){ 
    String phnum = etPhoneno.getText().toString(); 
    Intent callIntent = new Intent(Intent.ACTION_CALL); 
    callIntent.setData(Uri.parse("tel:" + phnum)); 
    startActivity(callIntent); 
    } 

Добавить эти два метода для времени выполнения проверки разрешений:

public boolean isPermissionGranted() { 
    if (Build.VERSION.SDK_INT >= 23) { 
     if (checkSelfPermission(android.Manifest.permission.CALL_PHONE) 
       == PackageManager.PERMISSION_GRANTED) { 
      Log.v("TAG","Permission is granted"); 
      return true; 
     } else { 

      Log.v("TAG","Permission is revoked"); 
      ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, 1); 
      return false; 
     } 
    } 
    else { //permission is automatically granted on sdk<23 upon installation 
     Log.v("TAG","Permission is granted"); 
     return true; 
    } 
} 


@Override 
public void onRequestPermissionsResult(int requestCode, 
             String permissions[], int[] grantResults) { 
    switch (requestCode) { 

     case 1: { 

      if (grantResults.length > 0 
        && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       Toast.makeText(getApplicationContext(), "Permission granted", Toast.LENGTH_SHORT).show(); 
       call_action(); 
      } else { 
       Toast.makeText(getApplicationContext(), "Permission denied", Toast.LENGTH_SHORT).show(); 
      } 
      return; 
     } 

     // other 'case' lines to check for other 
     // permissions this app might request 
    } 
} 

Кроме того, убедитесь, чтобы добавить это в манифесте:

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

ДЛЯ ФРАГМЕНТА

Если вы пытаетесь этот код в fragment, изменить

checkSelfPermission()

в

ActivityCompat.checkSelfPermission()

, а также изменить

ActivityCompat.requestPermissions()

в

requestPermissions()

+0

я использовать тот же код, но никакой запрос не появляется –

+1

, если вы пытаетесь этот код в виде фрагмента, изменить 'checkSelfPermission (' 'к ActivityCompact.checkSelfPermission (' и 'ActivityCompat.requestPermissions (' в 'requestPermissions (' ссылка: HTTPS : //stackoverflow.com/q/35989288/2584794 – Anup

Смежные вопросы