una telefonica samsung por otro movil llamadas llamada internet hangouts hacer gratis google fijo desviar desde como celular android android-intent phone-call android-implicit-intent android-phone-call

android - samsung - hacer una llamada telefonica por internet



¿Cómo hacer una llamada telefónica con intención en Android? (19)

Estoy usando el siguiente código para hacer una llamada en Android, pero me está dando una excepción de seguridad, por favor, ayuda.

posted_by = "111-333-222-4"; String uri = "tel:" + posted_by.trim() ; Intent intent = new Intent(Intent.ACTION_CALL); intent.setData(Uri.parse(uri)); startActivity(intent);

permisos

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

Excepción

11-25 14:47:01.661: ERROR/AndroidRuntime(302): Uncaught handler: thread main exiting due to uncaught exception 11-25 14:47:01.681: ERROR/AndroidRuntime(302): java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.CALL dat=tel:111-333-222-4 cmp=com.android.phone/.OutgoingCallBroadcaster } from ProcessRecord{43d32508 302:com.Finditnear/10026} (pid=302, uid=10026) requires android.permission.CALL_PHONE 11-25 14:47:01.681: ERROR/AndroidRuntime(302): at android.os.Parcel.readException(Parcel.java:1218) 11-25 14:47:01.681: ERROR/AndroidRuntime(302): at android.os.Parcel.readException(Parcel.java:1206) 11-25 14:47:01.681: ERROR/AndroidRuntime(302): at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:1214) 11-25 14:47:01.681: ERROR/AndroidRuntime(302): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1373) 11-25 14:47:01.681: ERROR/AndroidRuntime(302): at android.app.Activity.startActivityForResult(Activity.java:2749) 11-25 14:47:01.681: ERROR/AndroidRuntime(302): at android.app.Activity.startActivity(Activity.java:2855) 11-25 14:47:01.681: ERROR/AndroidRuntime(302): at com.Finditnear.PostDetail$2$1$1$1.onClick(PostDetail.java:604) 11-25 14:47:01.681: ERROR/AndroidRuntime(302): at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:884) 11-25 14:47:01.681: ERROR/AndroidRuntime(302): at android.widget.AdapterView.performItemClick(AdapterView.java:284) 11-25 14:47:01.681: ERROR/AndroidRuntime(302): at android.widget.ListView.performItemClick(ListView.java:3285) 11-25 14:47:01.681: ERROR/AndroidRuntime(302): at android.widget.AbsListView$PerformClick.run(AbsListView.java:1640)


NOTA IMPORTANTE:

Si usa Intent.ACTION_CALL , debe agregar el permiso CALL_PHONE .

Es solo si no desea que su aplicación se muestre en tabletas que no aceptan tarjetas SIM o no tienen GSM.

EN TU ACTIVIDAD:

Intent callIntent = new Intent(Intent.ACTION_CALL); callIntent.setData(Uri.parse("tel:" + Constants.CALL_CENTER_NUMBER)); startActivity(callIntent);

MANIFIESTO:

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

Entonces, si no es una función crítica para su aplicación, intente CALL_PHONE agregar el permiso CALL_PHONE .

OTRAS SOLUCIONES:

Es para mostrar la aplicación Teléfono con el número escrito en la pantalla, por lo que el usuario solo tendrá que hacer clic en el botón de llamada:

Intent dialIntent = new Intent(Intent.ACTION_DIAL); dialIntent.setData(Uri.parse("tel:" + Constants.CALL_CENTER_NUMBER)); startActivity(dialIntent);

No se necesita permiso para esto.


Creo que solo necesitas agregar un permiso en tu manifiesto:

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

Esto se librará de su excepción de seguridad.


En Android para ciertas funcionalidades, debe agregar el permiso al archivo Manifest.

  1. Ir a los proyectos AndroidManifest.xml
  2. Haga clic en la pestaña Permisos
  3. Haga clic en Agregar
  4. Seleccione Usos Permiso
  5. Vea la instantánea a continuación

6. Guarde el archivo de manifiesto y luego ejecute su proyecto. Tu proyecto ahora debería ejecutarse como se esperaba.


Esta demo te será útil ...

Haga clic en el botón de llamada:

Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + "Your Phone_number")); startActivity(intent);

Permiso en Manifiesto:

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


Opción más elegante:

String phone = "+34666777888"; Intent intent = new Intent(Intent.ACTION_DIAL, Uri.fromParts("tel", phone, null)); startActivity(intent);


Para evitar esto, se puede usar la GUI para ingresar permisos. Eclipse se ocupa de dónde insertar la etiqueta de permiso y, con mayor frecuencia, no es correcto


Para realizar una actividad de llamada utilizando intenciones, debe solicitar los permisos adecuados.

Para eso incluye permisos de uso en el archivo AndroidManifest.xml.

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

Luego incluye el siguiente código en tu actividad

if (ActivityCompat.checkSelfPermission(mActivity, Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) { //Creating intents for making a call Intent callIntent = new Intent(Intent.ACTION_CALL); callIntent.setData(Uri.parse("tel:123456789")); mActivity.startActivity(callIntent); }else{ Toast.makeText(mActivity, "You don''t assign permission.", Toast.LENGTH_SHORT).show(); }


Permiso en AndroidManifest.xml

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

Código completo:

private void onCallBtnClick(){ if (Build.VERSION.SDK_INT < 23) { phoneCall(); }else { if (ActivityCompat.checkSelfPermission(mActivity, Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) { phoneCall(); }else { final String[] PERMISSIONS_STORAGE = {Manifest.permission.CALL_PHONE}; //Asking request Permissions ActivityCompat.requestPermissions(mActivity, PERMISSIONS_STORAGE, 9); } } } @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { boolean permissionGranted = false; switch(requestCode){ case 9: permissionGranted = grantResults[0]== PackageManager.PERMISSION_GRANTED; break; } if(permissionGranted){ phoneCall(); }else { Toast.makeText(mActivity, "You don''t assign permission.", Toast.LENGTH_SHORT).show(); } } private void phoneCall(){ if (ActivityCompat.checkSelfPermission(mActivity, Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) { Intent callIntent = new Intent(Intent.ACTION_CALL); callIntent.setData(Uri.parse("tel:12345678900")); mActivity.startActivity(callIntent); }else{ Toast.makeText(mActivity, "You don''t assign permission.", Toast.LENGTH_SHORT).show(); } }


Permisos:

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

Intención:

Intent callIntent = new Intent(Intent.ACTION_CALL); callIntent.setData(Uri.parse("tel:0377778888")); startActivity(callIntent);


Puedes usar Intent.ACTION_DIAL lugar de Intent.ACTION_CALL . Esto muestra el marcador con el número ya ingresado, pero le permite al usuario decidir si realmente realiza la llamada o no. ACTION_DIAL no requiere el permiso CALL_PHONE .


Puedes usar esto también:

String uri = "tel:" + posted_by.replaceAll("[^0-9|//+]", "");


Solo el simple oneliner sin necesidad de permisos adicionales:

private void dialContactPhone(final String phoneNumber) { startActivity(new Intent(Intent.ACTION_DIAL, Uri.fromParts("tel", phoneNumber, null))); }


Todo esta bien.

Acabo de colocar la etiqueta de permisos de llamada antes de la etiqueta de aplicación en el archivo de manifiesto

y ahora todo funciona bien.


Use la acción ACTION_DIAL en su intención, de esta manera no necesitará ningún permiso. La razón por la que necesita el permiso con ACTION_CALL es para hacer una llamada telefónica sin ninguna acción por parte del usuario.

Intent intent = new Intent(Intent.ACTION_DIAL); intent.setData(Uri.parse("tel:0987654321")) startActivity(intent);


usa este código completo

Intent callIntent = new Intent(Intent.ACTION_DIAL); callIntent.setData(Uri.parse("tel:"+Uri.encode(PhoneNum.trim()))); callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(callIntent);


Solicitar permiso en manifiesto

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

Para llamar usa este código

Intent in = new Intent(Intent.ACTION_CALL, Uri.parse("tel:99xxxxxxxx")); try { startActivity(in); } catch (android.content.ActivityNotFoundException ex) { Toast.makeText(mcontext, "Could not find an activity to place the call.", Toast.LENGTH_SHORT).show(); }


final public void Call(View view){ try { EditText editt=(EditText)findViewById(R.id.ed1); String str=editt.getText().toString(); Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:"+str)); startActivity(intent); } catch (android.content.ActivityNotFoundException e){ Toast.makeText(getApplicationContext(),"App failed",Toast.LENGTH_LONG).show(); }


if(ContextCompat.checkSelfPermission( mContext,android.Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions((Activity) mContext, new String[]{android.Manifest.permission.CALL_PHONE}, 0); } else { startActivity(new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + "Your Number"))); }


11-25 14:47:01.681: ERROR/AndroidRuntime(302): blah blah...requires android.permission.CALL_PHONE

^ La respuesta está en el resultado de la excepción " requires android.permission.CALL_PHONE " :)