2016-09-07 2 views
2

개발 중이며 Android 앱입니다. 내 응용 프로그램에서 Viber 공유 기능을 추가합니다. 그래서 저는 온라인으로 "안드로이드에서 viber로 콘텐츠를 공유하는 방법"을 검색했습니다. 그런 다음 비즈니스를 위해 Viber를 찾았습니다. 공유 버튼의 경우이 링크 https://www.viber.com/en/viber-share-button을 따라갔습니다. 보시다시피, 그렇게 간단합니다. 그냥 URL로 브라우저로 리디렉션을 요청하고 있습니다. 그래서 나는 다음과 같이 viber에 공유 할 URL이있는 브라우저를 엽니 다. 내가 그 방법을 공유 버튼을 클릭하고 호출 할 때Viber 공유 버튼이 Android에서 예외를 throw합니다.

private void shareOnViberClick() 
     { 
      Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("viber://forward?text=textIWantToShare")); 
      startActivity(browserIntent); 
     } 

, 그것은 이

09-07 05:33:02.357 11715-11715/tonightfootballreport.com.tfr E/AndroidRuntime: FATAL EXCEPTION: main 
09-07 05:33:02.357 11715-11715/tonightfootballreport.com.tfr E/AndroidRuntime: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=viber://forward?text=မန္ယူအသင္း၏ ပရိတ္သတ္ဟုထုတ္ေဖာ္ေျပာျပခဲ့သည့္ ေဒါ့မြန္လူငယ္ၾကယ္ပြင့္ } 
09-07 05:33:02.357 11715-11715/tonightfootballreport.com.tfr E/AndroidRuntime:  at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1632) 
09-07 05:33:02.357 11715-11715/tonightfootballreport.com.tfr E/AndroidRuntime:  at android.app.Instrumentation.execStartActivity(Instrumentation.java:1424) 
09-07 05:33:02.357 11715-11715/tonightfootballreport.com.tfr E/AndroidRuntime:  at android.app.Activity.startActivityForResult(Activity.java:3390) 
09-07 05:33:02.357 11715-11715/tonightfootballreport.com.tfr E/AndroidRuntime:  at android.app.Activity.startActivityForResult(Activity.java:3351) 
09-07 05:33:02.357 11715-11715/tonightfootballreport.com.tfr E/AndroidRuntime:  at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:842) 
09-07 05:33:02.357 11715-11715/tonightfootballreport.com.tfr E/AndroidRuntime:  at android.app.Activity.startActivity(Activity.java:3587) 
09-07 05:33:02.357 11715-11715/tonightfootballreport.com.tfr E/AndroidRuntime:  at android.app.Activity.startActivity(Activity.java:3555) 
09-07 05:33:02.357 11715-11715/tonightfootballreport.com.tfr E/AndroidRuntime:  at tonightfootballreport.com.tfr.NewsDetailsActivity.shareOnViberClick(NewsDetailsActivity.java:364) 
09-07 05:33:02.357 11715-11715/tonightfootballreport.com.tfr E/AndroidRuntime:  at tonightfootballreport.com.tfr.NewsDetailsActivity.access$200(NewsDetailsActivity.java:47) 
09-07 05:33:02.357 11715-11715/tonightfootballreport.com.tfr E/AndroidRuntime:  at tonightfootballreport.com.tfr.NewsDetailsActivity$4.onClick(NewsDetailsActivity.java:134) 
09-07 05:33:02.357 11715-11715/tonightfootballreport.com.tfr E/AndroidRuntime:  at android.view.View.performClick(View.java:4240) 
09-07 05:33:02.357 11715-11715/tonightfootballreport.com.tfr E/AndroidRuntime:  at android.view.View$PerformClick.run(View.java:17721) 
09-07 05:33:02.357 11715-11715/tonightfootballreport.com.tfr E/AndroidRuntime:  at android.os.Handler.handleCallback(Handler.java:730) 
09-07 05:33:02.357 11715-11715/tonightfootballreport.com.tfr E/AndroidRuntime:  at android.os.Handler.dispatchMessage(Handler.java:92) 
09-07 05:33:02.357 11715-11715/tonightfootballreport.com.tfr E/AndroidRuntime:  at android.os.Looper.loop(Looper.java:137) 
09-07 05:33:02.357 11715-11715/tonightfootballreport.com.tfr E/AndroidRuntime:  at android.app.ActivityThread.main(ActivityThread.java:5103) 
09-07 05:33:02.357 11715-11715/tonightfootballreport.com.tfr E/AndroidRuntime:  at java.lang.reflect.Method.invokeNative(Native Method) 
09-07 05:33:02.357 11715-11715/tonightfootballreport.com.tfr E/AndroidRuntime:  at java.lang.reflect.Method.invoke(Method.java:525) 
09-07 05:33:02.357 11715-11715/tonightfootballreport.com.tfr E/AndroidRuntime:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
09-07 05:33:02.357 11715-11715/tonightfootballreport.com.tfr E/AndroidRuntime:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
09-07 05:33:02.357 11715-11715/tonightfootballreport.com.tfr E/AndroidRuntime:  at dalvik.system.NativeStart.main(Native Method) 
09-07 05:33:02.637 11715-11830/tonightfootballreport.com.tfr D/dalvikvm: GC_FOR_ALLOC freed 601K, 8% free 9230K/10032K, paused 56ms, total 60ms 
09-07 05:33:05.029 11715-11833/tonightfootballreport.com.tfr D/dalvikvm: GC_FOR_ALLOC freed 258K, 6% free 10866K/11548K, paused 8ms, total 8ms 

가 왜 오류가

을 발생합니다 오류 다음 던졌습니다? Viber 공유 API가 올바른지 알고 있습니까?

답변

4

귀하의 요구 사항에 맞는 intent-filter의 활동이 보장되지 않으므로 startActivity()이 실패 할 수 있으며 이는 귀하의 코드에서 처리해야합니다. 그럴 경우 ActivityNotFoundException을 던져서 startActivity()try/catch

+0

아. 그러나 그것은 항상 예외를 던집니다. 그래서 Viber Share가 전혀 작동하지 않는 것처럼 의미합니까? –

+0

아니, 정확히 말했듯이 그 장치에는 'viber : // forward? text = textIWantToShare'를 처리 할 Activity가있는'Intent-Filter '가있는 응용 프로그램이 없습니다. 그래서 Viber가 그것을 처리하기 위해 뭔가 다른 것을 가질 필요가 있습니까? 이 도구를 사용하면 https://play.google.com/store/apps/details?id=uk.co.ashtonbrsc.android.intentintercept를 통해 다른 앱 전송 기능을 확인할 수 있습니다. –

+0

오. 고맙습니다. 예, 기기에 Viber가 설치되어 있지 않습니다. –

0

으로 지정하면 장치가 현재 지정된 의도를 실행할 의도가 없음을 의미합니다. 우리는 사용자

에 어떤 메시지를 표시 할 수 있도록 그래서, 조건 (smsIntent.resolveActivity (mPackageManager)! = null이)를

Intent i = new Intent(Intent.ACTION_SEND); 
i.setPackage("com.viber.voip"); 
i.setType("text/plain"); 
i.putExtra(Intent.EXTRA_TEXT, "Message body"); 
1

If you prepend http:// may be problem solved.

Uri uri = Uri.parse("http://www.google.com"); 
를 사용하려고 확인하세요

Like in your case may be work around with viber url.

Uri.parse("http://viber:forward?text=textIWantToShare") 

EDIT 1

May be they are using this url scheme only for web we not be able to use it through our app.

So may be you can do this way.

boolean found = false; 
Intent share = new Intent(android.content.Intent.ACTION_SEND); 
     share.setType("text/plain"); 

     // gets the list of intents that can be loaded. 
     List<ResolveInfo> resInfo = context.getPackageManager() 
       .queryIntentActivities(share, 0); 
     if (!resInfo.isEmpty()) { 
      for (ResolveInfo info : resInfo) { 
       if (info.activityInfo.packageName.toLowerCase(
         Locale.getDefault()).contains("com.viber.voip") 
         || info.activityInfo.name.toLowerCase(
           Locale.getDefault()).contains("com.viber.voip")) { 
        share.putExtra(Intent.EXTRA_TEXT, "Your text to share"); 
        share.setPackage(info.activityInfo.packageName); 
        found = true; 
        context.startActivity(Intent.createChooser(share, "Select")); 
        break; 
       } 
      } 
      if (!found) { 

       displayToast(context, "Install viber android application"); 
       Uri marketUri = Uri.parse("market://details?id=" 
         + "com.viber.voip"); 
       Intent marketIntent = new Intent(Intent.ACTION_VIEW, marketUri); 
       context.startActivity(marketIntent); 
      } 

     } 
,

And also whatever Marcin sir have suggested in his answer.

+0

그러나 Viber는이 URL 스키마 인 viber : // forward? text = 만 사용해야합니다. –

+0

@WaiYanHein 웹을 위해서만이 * URL 스키마 *를 사용할 수 있습니다. 앱을 통해 사용할 수 없습니다. –

+0

@WaiYanHein 다른 방법에 대한 내 편집 된 답변을 확인하십시오. –