2016-12-23 1 views
0

나는 전화에서 모든 연락처를 나열하고 내 안드로이드 애플 리케이션에서 viber 인 텐트 viber 애플 리케이션을 직접 호출합니다. 나는 몇 가지 예를 온라인으로 발견했지만 모두 너무 오래되었습니다 몇 년 전에 수 있습니다 그들 중 누구도 나를 위해 일하지 못했습니다.내 안드로이드 애플 리케이션에서 Viber 통화 요청 시작

Uri uri = getUriFromPhoneNumber(phoneNumber, context); 
    if (uri != null) { 

     Intent localIntent4 = new Intent("com.viber.voip.action.CALL"); 
     localIntent4.setType("vnd.android.cursor.item/vnd.com.viber.voip.call"); 
     localIntent4.setData(Uri.parse("tel:" + uri)); 
     startActivity(localIntent4); 

     }else { 
     Toast.makeText(context, "Number is not in Viber Contacts List", Toast.LENGTH_LONG).show(); 
    } 

나는 androidmanifest.xml 파일에 read_contacts 권한을 포함 시켰습니다. = "true"를 수출하지만이 뭐지 작동하지 않은 권한 잘못된 여기 사람 종류 않습니다이다 : 그러나 내가 추천 한이 항상 발생 보안 exception.One 솔루션에 안드로이드가

activity android:name="com.ujjwalmainali.univhub.TestActivity" 
     android:launchMode="singleInstance" 
     android:exported="true" 
     android:screenOrientation="portrait"> 

포함 했다 의도 전화를해야합니다.

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

및 RuntimePermission를 위해 :

if (ActivityCompat.checkSelfPermission(context, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) { 
         ActivityCompat.requestPermissions(activityCompat, new String[]{Manifest.permission.CALL_PHONE}, 123); 
         return; 
        } 
        context.startActivity(localIntent4); 

을 여기

는 매니페스트에이 태그를 추가 예외

java.lang.SecurityException: Permission Denial: starting Intent { act=com.viber.voip.action.CALL dat=tel:xxxxxxxxxxxxx.xxxxxxx.xxxxxxxxxxxxxxxxx cmp=com.viber.voip/.phone.PhoneFragmentActivity } from ProcessRecord{271db4b9 3911:com.ujjwalmainali.univhub/u0a219} (pid=3911, uid=10219) not exported from uid 10204 
    at android.os.Parcel.readException(Parcel.java:1549) 
    at android.os.Parcel.readException(Parcel.java:1502) 
    at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:2463) 
    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1619) 
    at android.app.Activity.startActivityForResult(Activity.java:3761) 
    at android.support.v4.app.BaseFragmentActivityJB.startActivityForResult(BaseFragmentActivityJB.java:48) 
    at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:77) 
    at android.app.Activity.startActivityForResult(Activity.java:3722) 
    at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:859) 
    at android.app.Activity.startActivity(Activity.java:4032) 
    at android.app.Activity.startActivity(Activity.java:4000) 
    at com.ujjwalmainali.univhub.TestActivity.callToViberContact(TestActivity.java:57) 
    at com.ujjwalmainali.univhub.TestActivity$1.onClick(TestActivity.java:33) 
    at android.view.View.performClick(View.java:4785) 
    at android.view.View$PerformClick.run(View.java:19869) 
    at android.os.Handler.handleCallback(Handler.java:739) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:155) 
    at android.app.ActivityThread.main(ActivityThread.java:5696) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:372) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1028) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823) 
+0

메신저이 플래그를 설정해야합니다. 어떤 해결책있어? –

답변

1

의 로그 캣입니다. . . .

public void onRequestPermissionsResult(int requestCode, String[] permissions, 
             int[] grantResults) { 
    for (int grantResult : grantResults) { 
     if (grantResult == PackageManager.PERMISSION_DENIED) { 
      return; 
     } 
    } 
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) { 
     return; 
    } 
    startActivity(localIntent4); 
} 

localIntent4

은 사용하는 의도입니다.

편집 :

또한 당신은 또한 같은 문제에 직면 의도에

  localIntent4.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
+0

런타임 권한은 어떻게됩니까? –

+0

이제는 모두 좋습니다. – mhdjazmati

관련 문제