2016-09-07 10 views
2

私は開発中です。私のアプリでは、私はViber共有機能を追加しています。だから私はオンラインで "アンドロイドでviberとコンテンツを共有する方法"を探しました。それからビジネスのためにViberを見つけました。だから、共有ボタンのために、私はこのリンク、https://www.viber.com/en/viber-share-buttonに従った。ご覧のように、それはとても簡単です。それはちょうどurlでブラウザにリダイレクトするよう要求しています。だから私は次のようにviberを共有するURLを持つブラウザを開きます。AndroidでViber共有ボタンが例外をスローする

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'を処理する' intent-filter'を持つActivityを持つデバイスはありません。だから、あなたはそれを扱うために何か別のものを持っている必要がありますか?あなたはこのツールを使用することができます:https://play.google.com/store/apps/details?id=uk.co.ashtonbrsc.android.intentintercept他のアプリが送信しているものを確認する –

+0

ああ。ありがとうございました。はい、デバイスにViberがインストールされていません。 –

0

となります。これは、デバイスが現在の指定されたインテントを起動する意図がないことを意味します。私たちがユーザーに任意のメッセージを表示することができるようにので、

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"); 
を使用しようとする条件(smsIntent.resolveActivity(mPackageManager)!= null)をご確認ください。

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別のアプローチの私の編集された答えをチェックしてください。 –

関連する問題