小编stk*_*ent的帖子

getInstallerPackageName返回null

在我的Android应用程序中,我想检查应用程序安装的来源.我查看了Android文档,发现以下API是PackageManager类的一部分:

abstract String getInstallerPackageName(String packageName) 
Run Code Online (Sandbox Code Playgroud)

检索安装包的应用程序的包名称.

然后我在onCreateMyActivity 的方法中使用了以下代码:

if(Build.VERSION.SDK_INT >= 11) 
{
    PackageManager myapp= this.getPackageManager(); 
    String installer = myapp.getInstallerPackageName("com.MyPackage");
    if(installer == null)
    {
        Toast.makeText(getApplicationContext(), MyActivity.this.getString(R.string.invalidsource), Toast.LENGTH_SHORT).show();
        MyActivity.this.finish();
    }
}
Run Code Online (Sandbox Code Playgroud)

但看起来这个API null在真实设备上返回.

如果我们有任何其他方式获取应用程序安装源,请告诉我.

android install

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

Python 切片和负步幅 - 为什么这些例子显然是矛盾的?

我在这里阅读了很多关于将切片与负步幅相结合的答案,但以下问题仍然让我感到困惑。在几个地方,我已经看到下图用于说明切片符号的工作原理(指的是间隙,而不是条目):

 +---+---+---+---+
 | T | e | s | t |
 +---+---+---+---+
 0   1   2   3   4
-4  -3  -2  -1  
Run Code Online (Sandbox Code Playgroud)

这些例子与上图一致:

>>> "Test"[2:]
'st'

>>> "Test"[-2:]
'st'
Run Code Online (Sandbox Code Playgroud)

>>> "Test"[-2::-1]
'seT'
Run Code Online (Sandbox Code Playgroud)

似乎不一致 - 如果从-2分隔符开始,然后向后计数,为什么s还包含在返回的字符串中?

python slice

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

Android Intent.ACTION_VIEW基本身份验证

如何将HTTP基本身份验证信息传递给Intent.ACTION_VIEW?这是我表达意图的地方:

public class OutageListFragment extends ListFragment implements LoaderManager.LoaderCallbacks<Cursor> {

    // ...

    @Override
    public void onListItemClick(ListView listView, View view, int position, long id) {
        super.onListItemClick(listView, view, position, id);

        // Get a URI for the selected item, then start an Activity that displays the URI. Any
        // Activity that filters for ACTION_VIEW and a URI can accept this. In most cases, this will
        // be a browser.
        String outageUrlString = "http://demo:demo@demo.opennms.org/opennms/outage/detail.htm?id=204042";
        Log.i(TAG, "Opening URL: " + outageUrlString);
        // Get a …
Run Code Online (Sandbox Code Playgroud)

android android-intent android-fragments

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

如何从我自己的 Gradle 插件中确定正在使用的 Android Gradle 插件版本?

语境

我正在为 Android 项目编写一个 Gradle 插件。我的插件依赖于 Android Gradle 插件中的一些方法,但随着 Android Gradle 插件的发展,我需要使用的确切调用也发生了变化(例如,我需要的方法在 Android Gradle 插件的 v2.1.2 与 v2.2.2 中是不同的) )。我想从我自己的插件中以编程方式获取 Android Gradle 插件版本,然后调用该版本的适当方法。

问题

如何从我自己的 Gradle 插件中以编程方式访问 Android Gradle 插件版本?正在呼叫

project.rootProject.buildscript.getDependencies()
Run Code Online (Sandbox Code Playgroud)

正确的起点?

plugins android gradle

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

Android蓝牙低功耗特性通知计数限制:这是否因设备而异?

上下文

我正在构建一个针对5.0+的Android应用,它使用BLE连接到多个外围设备.这些外围设备中的每一个都具有许多(~10)特性.理想情况下,我想订阅这些特征中每一个特征的变化通知.

但是,我从阅读中理解的是,Android的蓝牙实施对可以激活的同时通知的数量实施了硬性限制.此问题确定了在Android蓝牙实施中定义限制的位置,并且还记录了限制随时间的变化:

最大并发活动通知(BTA_GATTC_NOTIF_REG_MAX):

  • Android 4.3上的4
  • Android 4.4上的7
  • Android 5.0+上的15

Dave Smith在此视频中确认了这些数字,并建议:

  • 这些限制对于设备是全局的(即,如果某个其他应用程序订阅了2个通知,则我的应用程序可用的数量减少2个);
  • 这些限制不应基于Android OS级别以外的任何其他级别(即它们应独立于制造商,实际硬件功能等).

问题

在5.0+设备上进行测试,但是,我发现,我似乎能够成功订阅超过15个通知.到目前为止,我已经观察到:

  • Pixel XL运行7.1.1
  • Galaxy S6运行6.0.1
  • Nexus 5运行5.X

这些通知订阅通过两项措施取得成功:

  1. 关贸总协定的运作状况是GATT_SUCCESS;
  2. 该应用程序能够接收有关所有目标特征的特征变化的通知.

这是好消息.一方面,更多"真实"通知==>减少手动轮询==>更好的用户体验.另一方面,无法创建导致"真实"通知设置失败的条件意味着我无法轻松编写或测试手动回退代码,一旦将此应用程序发布给真实用户,肯定会(?)需要这些代码.

问题

  • 是否期望这种限制忽略行为?(我无法在其他地方找到它.)
  • 是否有任何设备已知最多15个通知我可以用来测试不愉快的路径?

android bluetooth-lowenergy android-bluetooth

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

如何在不单击按钮的情况下在颤振中显示警报对话框

当存在特定错误状态接收且列表数据不为空时,我找不到在列内显示对话框警报的方法。警报对话框不涉及任何按钮单击,并且所有在线示例都包含 onTap 按钮。

\n

我想在列表数据不为空并且设置了错误标志时显示警报。

\n

下面是我的代码:

\n
  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      key: scaffoldKey,\n      appBar: _myAppBar(),\n      body: RefreshIndicator(\n        key: _refreshIndicatorKey,\n        onRefresh: handleRefresh,\n        child: isListError && ordersListData.isEmpty\n            ? _mainErrorWidget()\n            : Column(\n                children: <Widget>[\n                  Expanded(\n                    child: NotificationListener<ScrollNotification>(\n                      onNotification: (ScrollNotification scrollInfo) {\n                        if (hasMoreToLoad &&\n                            !isListLoading &&\n                            !isListError &&\n                            scrollInfo.metrics.pixels ==\n                                scrollInfo.metrics.maxScrollExtent) {\n                          handleLoadMore();\n                        }\n                      },\n                      child: ListView.builder(\n                          itemCount: ordersListData.length,\n                          itemBuilder: (BuildContext context, int index) {\n                            return Card(\n                              child: InkWell(\n                                onTap: () {\n                                  Navigator.push(\n                                    context,\n                                    MaterialPageRoute(\n                                      builder: (context) => OrderDetailsPage(\n …
Run Code Online (Sandbox Code Playgroud)

flutter

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

如何获得一个由三个字母组成的月份的相对时间字符串?

我正在使用此代码在我的应用程序中获取相对时间:

DateUtils.getRelativeTimeSpanString(
        mReferenceTime,
        now,
        DateUtils.MINUTE_IN_MILLIS,
        DateUtils.FORMAT_ABBREV_RELATIVE
);
Run Code Online (Sandbox Code Playgroud)

它正确返回了所有内容,但我想缩短月份。例如,代替“December 21”,它应该返回“Dec 21”。我怎样才能做到这一点?

android android-dateutils

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

我可以在没有包含布局的情况下使用一个视图创建xml文件吗?

我有一个名为CustomImageView的自定义视图。

我想用此视图创建一个xml文件,因此我将视图膨胀并以编程方式将其添加到当前布局中。(取决于方向,我将决定在何处添加它)

是否可以在xml中这样的事情而没有包含布局

<?xml version="1.0" encoding="utf-8"?>
<CustomImageView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="wrap_content"
    android:height="wrap_content"
    android:level="2"
    android:anotherattr="adsad" />
Run Code Online (Sandbox Code Playgroud)

之后,我将其充气。还是应该将其放在LinearLine之类的布局中?我只想要一个带有我的视图的xml,以便可以对其进行充气并添加到现有的布局中。.我不确定包含的布局是什么!

android android-layout

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

getMapAsync() - 调用一次并保存结果,或者每次需要地图时调用?

Google Play Services 6.5添加了该getMapAsync方法,该方法允许我们异步检索GoogleMap支持MapFragment(或MapView)的对象.文件说明了这一点

回调提供的GoogleMap对象为非null.

我对这里为什么需要异步检索没有很好的理解(即,什么情况可能导致被弃用的getMap方法返回null),这引出了以下问题:

当使用a时MapFragment,我应该调用getMapAsync一次onCreate,存储GoogleMap回调返回的(非null),然后在我的类中的其他地方引用这个存储的结果吗?或者,我是否应该getMapAsync每次需要与GoogleMap对象进行交互时调用,并在相应的回调中执行所有与地图相关的工作?

第一个选项导致更紧凑的代码,所以我更愿意尽可能使用它.GoogleMap我存储的对象是否存在"陈旧"或null(在这种情况下第二个选项会更安全)的风险是否存在?

android google-maps google-play-services android-maps-v2

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

如何从OkHttp Response对象中提取原始JSON字符串?

private static final String URL = "http://www.livroandroid.com.br/livro/carros/carros_{tipo}.json";

public static List<Carro> getCarros(Context context, String tipo) throws IOException {
    String url = URL.replace("{tipo}", tipo);
    OkHttpClient okHttpClient = new OkHttpClient();
    Request request = new Request.Builder()
            .url(URL)
            .build();
    Response response = okHttpClient.newCall(request).execute();
    String json = response.body().toString();
    List<Carro> carros = parserJSON(context, json);
    return carros;
}
Run Code Online (Sandbox Code Playgroud)

如果我json在调用getCarros方法时打印出变量的值,我在logcat中看到以下消息:

com.squareup.okhttp.internal.http.RealResponseBody@1e11866

如何记录我收到的实际JSON字符串?

android json okhttp

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