如何在 Xamarin 中使用 SetAction

Posted

技术标签:

【中文标题】如何在 Xamarin 中使用 SetAction【英文标题】:How to use SetAction in Xamarin 【发布时间】:2018-04-07 01:30:15 【问题描述】:

我正在尝试将我在 android 6.0 或更高版本上的应用列入白名单。我已经看到了执行此操作的 Android 代码,但它没有在 Xamarin 中翻译,Xamarin 文档只告诉您 SetAction 将字符串作为参数,然后是指向 Android 文档的链接,但最终并不相同。

这是 Xamarin 不接受的 Android 代码

intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);

它不喜欢设置。我已经阅读了 Xamarin 文档,其中说 SetAction() 需要一个字符串 arg,这就是他们所说的所有内容,并将您指向 Android 文档。

注意,我在一个 javascript 接口类中调用它,我尝试了这个,但它不起作用

class MyJSInterface : Java.Lang.Object
    
    Context context;
    public MyJSInterface(Context context)
        
            this.context = context;
        
    [Export]
    [JavascriptInterface]
    public void SetDozeOptimization()
        
            Toast.MakeText(context, "launch optimization", ToastLength.Short).Show();

            setDozeComplete = false;
            Intent intent = new Intent();
            String packageName = context.PackageName;
            PowerManager pm = (PowerManager)context.GetSystemService(Context.PowerService);
            if (pm.IsIgnoringBatteryOptimizations(packageName))
                intent.SetAction("ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS");
            else
            
                intent.SetAction("ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS");
                intent.SetData(Android.Net.Uri.Parse("package:" + packageName));
            
            context.StartActivity(intent);
        


那么正确的语法是什么?

【问题讨论】:

【参考方案1】:

Android.Provider.Settings.ActionRequestIgnoreBatteryOptimizations:

android.settings.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS

Android.Provider.Settings.ActionIgnoreBatteryOptimizationSettings:

android.settings.IGNORE_BATTERY_OPTIMIZATION_SETTINGS

例子:

intent.SetAction(Android.Provider.Settings.ActionRequestIgnoreBatteryOptimizations);
intent.SetAction(Android.Provider.Settings.ActionIgnoreBatteryOptimizationSettings);

【讨论】:

我没有测试,因为那不是问题,问题是关于语法,Visual Studio 说这是正确的语法。谢谢你。标记为已接受【参考方案2】:

这是您要查找的代码:

Intent intent = new Intent();
String packageName = context.PackageName;
PowerManager pm(PowerManager)Android.App.Application.Context.GetSystemService(Context.PowerService);

if (!pm.IsIgnoringBatteryOptimizations(packageName))

    intent.SetAction(Android.Provider.Settings.ActionRequestIgnoreBatteryOptimizations);
    intent.SetData(Android.Net.Uri.Parse("package:" + packageName));
    StartActivity(intent);

【讨论】:

以上是关于如何在 Xamarin 中使用 SetAction的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Xamarin 中使用 DLLIMPORT?

如何使用 Xamarin.Forms.Maps(无 Xamarin.Forms.GoogleMaps)在地图中应用样式或更改颜色

如何在 Xamarin 中使用 Google Map id?

如何在 Appium 中使用 javascript 单击 Xamarin 元素?

如何使用 Xamarin 在 Android 中同步获取 GPS 位置更新?

如何在VS2017专业版中使用Xamarin Profiler