私は新しいAndroid Marshmallowリリースに関して質問があります。
Intentまたはそれに類するものを介して特定のアプリの許可画面を表示することは可能ですか?
次のコードでアプリ設定を表示することは可能です - 直接許可画面を開くためのアナログ的な解決策はありますか?
startActivity(new Intent(Android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
Uri.fromParts("package", getPackageName(), null)));
私はすでにこれについていくつかの調査をしました、しかし、私は適切な解決策を見つけることができませんでした - 私はあらゆる助けに感謝します!
公式のマシュマロの許可ビデオ( 4m 43sのマーク にあります)によると、代わりにアプリケーションの設定ページを開く必要があります(そこからそれは許可ページへのワンクリックです)。
設定ページを開くには、
Intent intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", getPackageName(), null);
intent.setData(uri);
startActivity(intent);
これは不可能です。 私もそうしました。私は、パッケージ名と開始される活動を把握することができました。しかし、最終的には、宣言できない許可がないためにセキュリティ例外が発生します。
更新:
他の答えに関しては私はまた、アプリ設定画面を開くことをお勧めします。これを次のコードで行います。
public static void startInstalledAppDetailsActivity(final Activity context) {
if (context == null) {
return;
}
final Intent i = new Intent();
i.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
i.addCategory(Intent.CATEGORY_DEFAULT);
i.setData(Uri.parse("package:" + context.getPackageName()));
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
i.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
context.startActivity(i);
}
これを履歴スタックに入れたくないので、インテントフラグを使って削除します。
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Uri uri = Uri.fromParts("package", getPackageName(), null);
intent.setData(uri);
startActivity(intent);
説明 Settings.ACTION_APPLICATION_DETAILS_SETTINGS
アプリの詳細設定ページを開きます。ここからユーザーは手動で必要な権限を割り当てる必要があります。
Intent.FLAG_ACTIVITY_NEW_TASK
オプションの 。設定すると、新しいアクティビティとして設定画面(アクティビティ)が開きます。それ以外の場合は、現在実行中のアクティビティで開かれます。
Uri.fromParts("package", getPackageName(), null)
URIを準備または作成します。一方、getPackageName()はアプリケーションパッケージの名前を返します。
intent.setData(uri)
これを設定することを忘れないでください 。そうでなければ、 Android.content.ActivityNotFoundException
となります。 あなたの意図を Settings.ACTION_APPLICATION_DETAILS_SETTINGS
に設定しているため、Androidは検索する名前を期待しています。
代わりに、1行で特定のアプリの一般設定を開くことができます
startActivity(new Intent(Android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:" + BuildConfig.APPLICATION_ID)));
FLYME OS (Meizu) _ only _ についてのアクセス権を持つ独自のセキュリティアプリがあります。
それを開くには、次の目的を使用します。
public static void openFlymeSecurityApp(Activity context) {
Intent intent = new Intent("com.meizu.safe.security.SHOW_APPSEC");
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.putExtra("packageName", BuildConfig.APPLICATION_ID);
try {
context.startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
}
}
原因BuildConfigはあなたのアプリのBuildConfigです。
Kotlin
のコード数を減らしたい場合は、次のようにします。
fun Context.openAppSystemSettings() {
startActivity(Intent().apply {
action = Settings.ACTION_APPLICATION_DETAILS_SETTINGS
data = Uri.fromParts("package", packageName, null)
})
}
に基づく Martin Konecny answer
これはあなたを助けるかもしれません
private void openSettings() {
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", getPackageName(), null);
intent.setData(uri);
startActivityForResult(intent, 101);
}
Xamarin Forms Android:
//---------------------------------------------------------
public void OpenSettings()
//---------------------------------------------------------
{
var intent = new Intent(Android.Provider.Settings.ActionApplicationDetailsSettings,
Android.Net.Uri.Parse("package:" + Forms.Context.PackageName));
Forms.Context.StartActivity(intent);
}
実用的には許可を得ることはできません 実用的にはそのコードの行をtry {} catch {}にして残念ながらアプリを停止させ...そしてcatch bodyにダイアログボックスを作成することをお勧めしますこれは他のアプリの上に描画許可を有効にするために小さなチュートリアルにユーザーをナビゲートします...そしてはいボタンをクリックしてこのコードを入力してください...
Intent callSettingIntent= new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
startActivity(callSettingIntent);
この目的は 他のアプリの上に描画のリストを直接開く 権限を管理することです。それからここから他のアプリの上に描画へのワンクリックですPermissions ...私はこれがあなたが探している答えではないことを知っています...しかし、私は私のアプリでこれをやっている...