Korzystam z następującego kodu, aby wykonać połączenie w Androidzie, ale daje mi wyjątek bezpieczeństwa, proszę o pomoc.
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);
uprawnienia
<uses-permission android:name="android.permission.CALL_PHONE" />
Wyjątek
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)
To demo pomoże ci ...
Kliknij przycisk połączenia:
Zezwolenie na manifest:
źródło
Bardziej elegancka opcja:
źródło
Użyj akcji ACTION_DIAL w swoim zamiarze, w ten sposób nie będziesz potrzebować żadnego pozwolenia. Powodem, dla którego potrzebujesz uprawnień w ACTION_CALL, jest wykonywanie połączeń telefonicznych bez żadnych działań ze strony użytkownika.
źródło
Wszystko w porządku.
właśnie umieściłem tag uprawnień do połączeń przed tagiem aplikacji w pliku manifestu
a teraz wszystko działa dobrze.
źródło
WAŻNA UWAGA:
Jeśli używasz
Intent.ACTION_CALL
, musisz dodaćCALL_PHONE
pozwolenie.Jest w porządku, tylko jeśli nie chcesz, aby Twoja aplikacja wyświetlała się w Google Play na tabletach, które nie biorą karty SIM lub nie mają GSM.
W TWOJEJ DZIAŁALNOŚCI:
OCZYWISTY:
Jeśli więc nie jest to krytyczna funkcja dla Twojej aplikacji, staraj się unikać dodawania
CALL_PHONE
uprawnień.INNE ROZWIĄZANIE:
Ma wyświetlać aplikację Telefon z numerem wpisanym na ekranie, aby użytkownik musiał tylko kliknąć przycisk połączenia:
Nie wymaga na to zgody.
źródło
Po prostu prosty oneliner bez żadnych dodatkowych uprawnień:
źródło
użyj tego pełnego kodu
źródło
Poproś o zezwolenie w manifeście
Do połączeń użyj tego kodu
źródło
Licencja w AndroidManifest.xml
Pełny kod:
źródło
Uprawnienia:
Zamiar:
źródło
Możesz również użyć tego:
źródło
Aby wykonać połączenie za pomocą zamiarów, należy poprosić o odpowiednie uprawnienia.
Do tego należy dołączyć uprawnienia w pliku AndroidManifest.xml.
Następnie dołącz następujący kod do swojej aktywności
źródło
W przypadku połączenia z dialera (bez konieczności uzyskania pozwolenia):
W przypadku bezpośredniego połączenia z aplikacji (wymagane zezwolenie):
Pozwolenie:
źródło
Aby tego uniknąć - można użyć GUI do wprowadzania uprawnień. Zaćmienie dbają o to, gdzie wstawić znacznik uprawnień, a częściej nie jest poprawne
źródło
źródło
W Androidzie dla niektórych funkcji musisz dodać uprawnienie do pliku manifestu.
6. Zapisz plik manifestu, a następnie uruchom projekt. Twój projekt powinien teraz działać zgodnie z oczekiwaniami.
źródło
^ Odpowiedź leży w wyjściu wyjątku „
requires android.permission.CALL_PHONE
” :)źródło
źródło
źródło