小编Muk*_*ani的帖子

Android支持lib v4或v13

我已经开发了使用API​​ 13和min-sdk以及API 13的Android应用程序构建.我想在选项卡中包含滑动,并且出于使用v4支持库的目的.

我有以下问题,

  1. 我应该使用哪个支持库v4或v13?
  2. 我应该将目标更改为API 14吗?更重要的是我如何决定哪个应该是我的目标API来编译?

android android-support-library

23
推荐指数
2
解决办法
2万
查看次数

按包名查找正在运行的进程ID

我正在编写一个脚本,我需要提供我的应用程序的PID.我可以通过以下命令列出所有进程及其PID,并可以看到我的应用程序的条目.

adb shell ps

这给了我一个巨大的进程列表.我需要一个条目(我可以进一步提供给另一个命令),所以我想用包名过滤这个结果.grep命令在我的Windows机器上不起作用.也尝试了以下命令,但它没有帮助.

adb shell ps name:my_app_package

android adb

17
推荐指数
3
解决办法
2万
查看次数

Android软件包安装程序 - 如何获得"打开"和"完成"以及活动结果?

我的Android应用程序有一个升级到较新版本的选项,较新版本APK我保持在SD卡路径下可用.单击"升级"选项,我将调用以下方法.

    public static void launchInstaller(Activity act, String apkPath)
    {
       Intent intent = new Intent(Intent.ACTION_VIEW);
       intent.setDataAndType(Uri.fromFile(new File(apkPath)), "application/vnd.android.package-archive");
       intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
       act.startActivityForResult(intent, 0);
    }
Run Code Online (Sandbox Code Playgroud)

我包含FLAG_ACTIVITY_NEW_TASK的原因是,在升级之后,我想要"打开"和"完成"选项,如果我不使用此标志,则不会显示这些选项.

当上面的代码启动包安装程序时,它有两个选项OK&Cancel,当用户按下Cancel时,我想知道用户取消了它.但我无法知道因为onActivityResult被称为pre-maturely.我在阅读以下帖子后发现了这种情况的原因.

Android - startActivityForResult立即触发onActivityResult

onActivityResult()过早调用

他们要求我确保我用于启动活动的Intent没有设置FLAG_ACTIVITY_NEW_TASK.看这里:

http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NEW_TASK

特别要注意:"当调用者从正在启动的活动请求结果时,不能使用此标志."

如果活动是作为新任务的一部分启动的,那么Android将立即使用RESULT_CANCELED调用onActivityResult(),因为一个任务中的活动无法将结果返回给另一个任务,只有同一任务中的活动才能执行此操作.

但在我的情况下,我无法删除FLAG_ACTIVITY_NEW_TASK,否则我将无法在成功升级时获得"打开"和"完成"选项.

有人遇到过类似的问题吗?请帮助我,因为它让我疯了.

android android-intent android-install-apk android-launcher

9
推荐指数
1
解决办法
2921
查看次数

一旦预期的消息传递到Android应用程序,我的服务器是否可以收到来自GCM的确认?

我已经开始将GCM集成到我的Android应用程序中.在启动教程的帮助下,我已经设置了示例演示,它的工作非常棒.我还了解当我的服务器将消息发送到GCM时收到的不同响应状态,我认为这表示我的服务器和GCM服务器之间的通信状态.

我的问题是,有没有办法获得GCM服务器和Android应用程序之间的通信状态?基本上是表示预期消息是否已成功传递的确认.我还读到,默认超时是4周,除非设置了time_to_live标志,这使我理解GCM维护队列并且肯定会确保消息传递.

但是,为了确保可靠性,作为第三方服务器,我是否应该重新发送相同的消息(如果GCM基础设施尚未处理)?如果我需要照顾重试,如何确定失败?

我的一种方法是,定义推送ID并将其与消息一起发送,一旦收到,Android应用程序将报告具有相应推送ID的服务器.如果在指定时间内未收到响应,则服务器将重试发送消息.这种方法在帖子的第二个答案中定义,将有助于监控GCM(特别是QA团队)所花费的时间.

android google-cloud-messaging

8
推荐指数
1
解决办法
3696
查看次数

与"最小宽度600 dp"选择器混淆

在我的应用程序中,我支持手机/平板电脑的外形和单独的布局我使用选择器"布局"(对于手机),"layout-sw600dp"(对于平板电脑).

以下是详细信息:

http://android-developers.blogspot.in/2011/07/new-tools-for-managing-screen-sizes.html

Typical numbers for screen width dp are:
320: a phone screen (240x320 ldpi, 320x480 mdpi, 480x800 hdpi, etc).
480: a tweener tablet like the Streak (480x800 mdpi).
600: a 7” tablet (600x1024).
720: a 10” tablet (720x1280, 800x1280, etc).
Run Code Online (Sandbox Code Playgroud)

我正在使用Nexus 4手机,以下是它的主要内容

Size:       4.7 inches
Resolution: 768 x 1280 pixels
DPI:        318
dp:         386 
Here is the dp calculation
dp = (px * 160)/dpi
dp = (768 * 160)/318
Run Code Online (Sandbox Code Playgroud)

当我在dp计算公式中使用768 px时,dp值为386,但是当我通过1280 px时,dp值为644.

根据以下理解,我认为Nexus 4版本将从sw600dp读取布局,但事实并非如此.

由于分辨率为宽度X高度,因此旋转设备时将反转.

我认为这是使用sw选择器与3.2之前的大型xlarge扇区进行的即兴创作.

android android-selector

7
推荐指数
2
解决办法
1万
查看次数

Base64String中的单个字符包含多少字节?1,2或更多

在我的Android应用程序中,要求是从服务器获取图像并将它们缓存到堆内存中.

收到请求后,服务器首先对byte[]into进行编码Base64String并返回该字符串.并且,在将其呈现到ImageViewAndroid应用程序时,将其解码Base64Stringbyte[],创建一个Bitmap并将其打开ImageView.

由于所有内容都在缓存中,因此应用程序有可能在某些时候内存不足,并严重崩溃.

为了防止内存不足,我在我的应用程序中定义了一个安全量程(例如5 MB).如果在任何时候可用内存低于此安全量程,则用户需要将一些图像标记为要删除的候选者.与此同时,应用程序将显示清除所选项目后将释放的估计内存.

Bitmap已经回收的一次用户离开图像了,所以Bitmap实际上是不持有任何记忆,只要我们离开.

在一个特定的测试中,我下载了55个图像,我的堆从增长16 MB42 MB.这意味着,55张图像占据了26 MB.在我清除了所有这些之后,堆缩回了16 MB.

但是,当我拿出所有Base64String它的累积长度时,它就会出现11983840.如果我认为一个字符作为1 byte11983840 bytes品牌11.4 MB

问题是,长度的累积总和Base64String是唯一可用的度量,这有助于让用户知道他的选择可以释放多少内存.

我也看到了以下问题,其中提到,每个3 Bytes原始数据的Base64String都会有4 Characters.

Base64长度计算?

问题是,单个字符中Base64String包含多少字节?1,2或更多

如果1 character1 byte,并且在我的测试中,堆增长和缩小了26 …

base64 android heap-memory character-encoding android-memory

6
推荐指数
1
解决办法
334
查看次数

标签助手 - 自关闭 HTML 标签是一个坏习惯?

我正在合并TagHelpers到我的 MVC vNext 项目中,我意识到当我自己关闭 HTML 标签时它们不起作用。

@addTagHelper "*, Microsoft.AspNet.Mvc.TagHelpers"

<label asp-for="FirstName"/> <!-- self closing tag -->

<span asp-validation-for="FirstName"/> <!-- self closing tag -->
Run Code Online (Sandbox Code Playgroud)

而且,当我放置结束标签时,我会看到正在显示的值。

<label asp-for="FirstName"></label>

<span asp-validation-for="FirstName"></span>
Run Code Online (Sandbox Code Playgroud)

生成的 HTML

<label for="FirstName">FirstName</label>
<span class="field-validation-error" data-valmsg-for="FirstName" data-valmsg-replace="true">
    <span id="FirstName-error" class="">The FirstName field is required</span>
</span>
Run Code Online (Sandbox Code Playgroud)

我想知道什么,它有什么区别?而且,自我关闭配对标签是一个坏习惯。如果您知道一些讨论此设计原则的文章,请与我分享,将不胜感激。

html asp.net-core-mvc tag-helpers

6
推荐指数
1
解决办法
1635
查看次数

asp-validation-for tag helper不适用于服务器端验证错误

CustomerEntryModel

    [Required]
    public String FirstName { get; set; }
Run Code Online (Sandbox Code Playgroud)

CustomerController.cs

    [HttpGet]
    [Route("Get")]
    public IActionResult Get()
    {
        CustomerEntryModel model = new CustomerEntryModel();
        return View("CustomerEntry", model);
    }

    [HttpPost]
    [Route("Update")]
    public ActionResult Update([FromForm]CustomerEntryModel model)
    {
        if (!ModelState.IsValid)
        {
            return View("CustomerEntry", model);
        }
        return null;
    }
Run Code Online (Sandbox Code Playgroud)

CustomerEntry.cshtml

@addTagHelper "*, Microsoft.AspNet.Mvc.TagHelpers"
<form asp-controller="Customer" asp-action="Update" method="post">
    <input type="text" asp-for="FirstName" />
    <span asp-validation-for="FirstName" />
    <input type="submit" value="Submit" />
</form>
Run Code Online (Sandbox Code Playgroud)

我没有包含jQuery验证库,因此验证发生在服务器端.现在,当我提交名为空的页面时,执行更新操作并收到相同的视图,但没有任何错误.

而不是<span asp-validation-for="FirstName" />标记助手,如果我使用html助手,@Html.ValidationMessageFor(m => m.FirstName)我得到名字所需的错误.

根据我的理解,TagHelper扩展了传统行为,HtmlHelper提供HTML友好的开发体验.这意味着,适用的东西必须HtmlHelper与它的TagHelper …

asp.net-core-mvc tag-helpers asp.net-core

4
推荐指数
1
解决办法
5553
查看次数

MVC 6 VNext如何设置HtmlFieldPrefix?

我的观点分为部分观点.因此,在提交时我的模型没有正确重建.

页面视图显示员工数据,其中Employee.Contactinfo是_contactInfo局部视图的模型,其中还具有部分视图_phoneInfo以呈现具有模型Employee.ContactInfo.PhoneInfo的电话信息.

现在的问题是属性的名称.渲染时的Employee.ContactInfo.PhoneInfo.Contact1名称为"Contact1",因此在提交时模型未正确创建,我获得了Employee的原始数据,但是像ContactInfo这样的复杂类型为null.

我认为解决方案是在渲染局部视图时添加前缀.如何在MVC 6中执行以下操作?

employee.cshtml

@model Employee
<% Html.RenderPartial("_conctactInfo", Model.ContactInfo, new ViewDataDictionary
{
    TemplateInfo = new System.Web.Mvc.TemplateInfo { HtmlFieldPrefix = "ContactInfo" }
})
%>
Run Code Online (Sandbox Code Playgroud)

_contactInfo.cshtml

@model ContactInfo
<% Html.RenderPartial("_phoneInfo", Model.PhoneInfo, new ViewDataDictionary
{
    TemplateInfo = new System.Web.Mvc.TemplateInfo { HtmlFieldPrefix = "PhoneInfo" }
})
%>
Run Code Online (Sandbox Code Playgroud)

_phoneInfo.cshtml

@model PhoneInfo
<input asp-for="@Model.Contact1" />
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc partial-views asp.net-mvc-partialview asp.net-core-mvc

2
推荐指数
2
解决办法
1615
查看次数

C# 如何确定对象中包装的值是 null 还是默认值?

我目前正在编写自定义所需的验证属性,并且我想在值为 null 或默认值时恢复错误。对于默认值,我的意思是“”代表字符串,0代表整数,0.0代表双精度,空代表对象。

为了实现这一目标,我调用以下函数,该函数适用于任何类型

    protected bool IsNullOrDefault<T>(T value)
    {
        return object.Equals(value, default(T));
    }
Run Code Online (Sandbox Code Playgroud)

以下是测试:

    object obj = null;
    bool flag = IsNullOrDefault(obj));
Run Code Online (Sandbox Code Playgroud)

标志=真

    int i = 0;
    bool flag = IsNullOrDefault(i);
Run Code Online (Sandbox Code Playgroud)

标志=真

    double d = 0.0;
    Console.WriteLine(IsNullOrDefault(d));
Run Code Online (Sandbox Code Playgroud)

标志=真

    object value = 0;
    Console.WriteLine(IsNullOrDefault(value));
Run Code Online (Sandbox Code Playgroud)

标志=假

这里对象内部又包含了int,但它仍然认为它是一个对象,其默认值为null,当前值为0。所以它返回False

问题是,我要重写的框架方法为我提供了对象值,因此它将始终与上面提到的最后一个场景相匹配。

    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    { ....
    }
Run Code Online (Sandbox Code Playgroud)

根据值,我们如何将对象转换为实际类型(在本例中为int )?因此,即使对于上面的最后一个场景,我也会收到True 。

c# null object default-value validationattribute

1
推荐指数
1
解决办法
508
查看次数