1

Android OS は、どのブラウザーが既定のブラウザーであるかに関する情報をどこに保存しますか? たとえば、Chrome が私の既定のブラウザーである場合、その情報をどこかに保存する必要がありますよね?

引っ張った

データ/データ/com.android.browser/shared_prefs/com.android.browser_preferences.xml

また、アプリが何らかのアクションの既定のアプリになるたびに、その情報がどこに保存されるかを知りたいです。

しかし、それにはその情報が含まれていないようです

この情報を取得する adb コマンドはありますか?

4

2 に答える 2

3

エデュアルドの答えは完全に正しいです。デフォルトのブラウザがデフォルトのアプリを保存するのではなく、システムが保存します。

ただし、次のように、任意のインテントのデフォルトのアプリ設定を取得できます。

public static void getDefaultApp(final Context context, final String url) {
    Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
    ComponentName component = i.resolveActivity(context.getPackageManager());
    if (component == null) {
        // no app at all can handle this intent
        // there might be profile restrictions applied since android 4.3
    } else if (component.getPackageName().equals("android")) {
        // there are multiple apps available handling your intent
        // no default app is set, the Chooser will be shown
    } else if (component.getPackageName().equals("com.android.browser")) {
        // the default browser will be shown
        // there might be multiple apps installed handling your intent
        // however the user picked the default browser
    } else if (component.getPackageName().equals("com.android.chrome")) {
        // chrome will handle your intent
        // there are multiple apps installed handling your intent most likely
        // however the user picked this app
    } else {
        // some other app will handle your intent
        // there are multiple apps installed handling your intent most likely
        // however the user picked this app
        Log.d(TAG, "user choice package: " + component.getPackageName());
        Log.d(TAG, "user choice class:   " + component.getClassName());
    }
}
于 2013-11-16T07:27:10.080 に答える
2

Android はIntentオブジェクトを使用してアクティビティ間の通信を行います。1 つのアクティビティは、アクションとデータを指定するインテントを作成し、それをシステムに送信します。次に、システムは、そのインテントに応答するのに最適なアプリケーションを決定し、そのインテントを選択したアプリケーションに転送します。

たとえば、ブラウザの AndroidManifest.xml ファイルを調べると、<intent-filter>「http」、「https」、「inline」、「text/html」、「 text/plain」など。

一部のアプリケーションは同じインテント フィルターを指定する場合があり、その場合は競合が発生します。たとえば、「http://wikipedia.org/」などのインテント フィルタを登録するウィキペディア アプリケーションは多数あります。

システムで競合が発生すると、「Complete action using」というダイアログがポップアップ表示され、インテント フィルターに一致したアプリケーションのリストが含まれます。この時点で、ユーザーは使用するアクティビティを選択し、必要に応じてシステムにその選択を記憶するように指示します。

ウィキペディアの例では、ユーザーがウィキペディア アプリを選択し、その選択をシステムに記憶させることを選択したとします。それ以降、システムは「 http://wikipedia.org/ 」で始まるインテントに対して常にウィキペディア アプリを起動します。「http:」で始まるインテントについては、ウィキペディア アプリのインテント フィルターと一致しないため、引き続きブラウザーを起動します。

システムがインテント、アプリケーション、およびユーザー設定のリストを実際にどこに保持しているかについては、その部分についてはお答えできません。これはおそらく Android の内部データの一部であり、その正確な場所は公開された API の一部ではなく、予告なしに変更される可能性があります。ユーザー設定をリセットするようにシステムに指示する方法はおそらくあると思いますが、その方法はわかりません。

于 2013-11-15T23:20:10.690 に答える