47

Android マーケットへのリンクを開くインテントを起動しようとしています。

Android マニフェスト部分は次のようになります。

<activity android:name="com.surreall.sixdice.Start" android:label="Six Dice" android:screenOrientation="portrait" android:configChanges="keyboardHidden|orientation">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />                               
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />  
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

インテントの起動は次のようになります。

public void onClick(View v) {
    String PublisherID = "pub:surreallgames";
    Uri marketUri = Uri.parse("market://search?q="+PublisherID);
    Intent marketIntent = new Intent(Intent.ACTION_VIEW, marketUri);                    
    startActivity(marketIntent);
}

logcat 出力:

06-17 17:38:47.393: E/AndroidRuntime(476): FATAL EXCEPTION: main
06-17 17:38:47.393: E/AndroidRuntime(476): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=market://search?q=pub:surreallgames }
06-17 17:38:47.393: E/AndroidRuntime(476):  at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1409)
06-17 17:38:47.393: E/AndroidRuntime(476):  at android.app.Instrumentation.execStartActivity(Instrumentation.java:1379)
06-17 17:38:47.393: E/AndroidRuntime(476):  at android.app.Activity.startActivityForResult(Activity.java:2827)
06-17 17:38:47.393: E/AndroidRuntime(476):  at android.app.Activity.startActivity(Activity.java:2933)
06-17 17:38:47.393: E/AndroidRuntime(476):  at com.surreall.sixdice.Start$9.onClick(Start.java:265)
06-17 17:38:47.393: E/AndroidRuntime(476):  at android.view.View.performClick(View.java:2485)
06-17 17:38:47.393: E/AndroidRuntime(476):  at android.view.View$PerformClick.run(View.java:9080)
06-17 17:38:47.393: E/AndroidRuntime(476):  at android.os.Handler.handleCallback(Handler.java:587)
06-17 17:38:47.393: E/AndroidRuntime(476):  at android.os.Handler.dispatchMessage(Handler.java:92)
06-17 17:38:47.393: E/AndroidRuntime(476):  at android.os.Looper.loop(Looper.java:123)
06-17 17:38:47.393: E/AndroidRuntime(476):  at android.app.ActivityThread.main(ActivityThread.java:3683)
06-17 17:38:47.393: E/AndroidRuntime(476):  at java.lang.reflect.Method.invokeNative(Native Method)
06-17 17:38:47.393: E/AndroidRuntime(476):  at java.lang.reflect.Method.invoke(Method.java:507)
06-17 17:38:47.393: E/AndroidRuntime(476):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
06-17 17:38:47.393: E/AndroidRuntime(476):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
06-17 17:38:47.393: E/AndroidRuntime(476):  at dalvik.system.NativeStart.main(Native Method)
4

6 に答える 6

100

エミュレーター、Kindle Fire など、Google Play ストアがない Android 環境でこのコードを実行しています。

エミュレータでこれが発生した場合は、Play ストアがあるデバイスでこのコード パスをテストしてください。

Play ストアがないハードウェアでこれが発生した場合、または Play ストアがないデバイスにアプリを配布する予定がある場合は、例外を処理するか、 を使用PackageManagerして、 を呼び出す前に成功するresolveActivity()かどうかを判断してください。IntentstartActivity()

if(intent.resolveActivity(getPackageManager()) != null)
    startActivityForResult(intent, 0);
else
    ...
于 2012-06-17T18:39:55.860 に答える
19

Intent.createChooser() メソッドを使用して、Intent を安全に起動できます。インテントを処理できるアプリケーションが存在しない場合は、ユーザーにその旨を伝えるダイアログが表示されます。ただし、Google Play ストアがインストールされている場合、ユーザーは Play ストアでインテントを「開く」ことを選択できます。

startActivity(Intent.createChooser(marketIntent, "dialogTitle"));
于 2012-06-17T18:49:13.787 に答える
16

より良い解決策は、Google Play アプリで uri を開こうとすることですが、そのようなアプリがない (このインテントを処理するアクティビティがない) 場合は、次の例のようにブラウザで uri を開こうとするだけです:

public static void rateApp(Context context) {
    try {
        context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + context.getPackageName())));
    } catch (android.content.ActivityNotFoundException anfe) {
        viewInBrowser(context, "https://play.google.com/store/apps/details?id=" + context.getPackageName());
    }
}

public static void viewInBrowser(Context context, String url) {
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
    if (null != intent.resolveActivity(context.getPackageManager())) {
        context.startActivity(intent);
    }
}
于 2015-03-06T09:00:19.620 に答える
7

追加してみる

<category android:name="android.intent.category.DEFAULT" />

呼び出し元のアクティビティに。

于 2013-03-19T00:08:14.807 に答える
2
private void OpenStoreIntent(){
        String url="";
        Intent storeintent=null;
        try {
            url = "market://details?id=com.myapp.packagename";
            storeintent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
            storeintent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
            context.startActivity(storeintent);
        } catch ( final Exception e ) {
            url = "https://play.google.com/store/apps/details?id=com.myapp.packagename";
            storeintent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
            storeintent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
            context.startActivity(storeintent);
        }

    }
于 2016-03-06T07:22:58.243 に答える
0

私が書いたので、同じエラーが発生しました:

Linking.openURL('www.somewebsite.com');

URLをhttp://somewebsite.com(またはhttps://somewebsite.com、ターゲットにしているWebサイトに応じて)に変更すると、問題が修正されました:)

于 2019-10-29T14:27:36.300 に答える