2

以下のコードは、Android バージョン 2.xx でうまく機能します。デバイスで gps を正常にオンにします。しかし問題は、Android バージョン 4.x 以降では機能しないことです。

バージョン4.x以降でプログラムでgpsを有効にしようとしています。ヘルプや解決策はありますか?

    String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
        Utility.print("provider string " + provider);
        if (!provider.contains("gps")) { // if gps is disabled
            Utility.print("gps is disabled now enabled");
            final Intent poke = new Intent();
            poke.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider");
            poke.addCategory(Intent.CATEGORY_ALTERNATIVE);
            poke.setData(Uri.parse("3"));
            sendBroadcast(poke);
            Utility.print("gps is disabled now enabled 1");
        } else {
            Utility.print("gps is already enabled");
        }
4

2 に答える 2

1

サード パーティのアプリは、保護されたシステム設定を変更できないようにする必要があります。これは Android 4.0 で修正されたバグだと思います - おそらくこれ:

http://code.google.com/p/android/issues/detail?id=7890

于 2012-04-05T09:52:03.117 に答える
0

コードから:

 <receiver android:name=".widget.SettingsAppWidgetProvider" android:label="@string/gadget_title">

Android 4.0以降は次のようになります。

 <receiver android:name=".widget.SettingsAppWidgetProvider"
            android:label="@string/gadget_title"
            android:exported="false"
            android:enabled="@bool/has_powercontrol_widget">

を追加しましたandroid:exported="false"

コンテンツ プロバイダを他のアプリケーションのコンポーネントで使用できるかどうか。使用できる場合は「true」、使用できない場合は「false」。「false」の場合、プロバイダーは、同じアプリケーションのコンポーネントまたは同じユーザー ID を持つアプリケーションでのみ使用できます。デフォルト値は「真」です。

そのため、アプリケーションには設定アプリの uid とコンポーネント名がないため、機能しませんでした。

于 2012-04-05T09:56:59.603 に答える