小编Sta*_*Kou的帖子

如何测试远程android aidl服务

我有一个与远程android服务交互的小应用程序.我想在单元测试中模拟该服务.我使用RobolectricJUnit其他测试用例和阴影,但我无法想象如何处理远程服务.

是否足以使用相同的包创建和启动测试服务,使用相同的实际服务和导出方法aidl

由于我没有该服务的代码,我认为我不能使用需要实际类RobolectricShadowService.

非常感谢.

java android robolectric

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

Android BLE被动扫描

我想在我的Android应用程序中被动地扫描BLE广告客户.
但我找不到如何做到这一点.

但我无法找到是否可以使用被动扫描模式.

问题:是否可以在Android上使用"PASSIVE SCAN"?如果可能,如何使用此功能?

android bluetooth-lowenergy network-scan

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

Loadmanager onLoadFinished未调用

我正在尝试使用LoaderCallBacks从数据库加载数据。但是不会调用loadercallbacks中的onLoadFinished函数。因此,您可以在日志中看到返回的行数为1,但是列表中没有显示任何条目,因此您也可以看到未调用onLoadFinished。

SerieFragment

    公共类SerieFragment扩展了SherlockListFragment实现
            LoaderCallbacks {

        私有SimpleCursorAdapter适配器;

        @Override
        公共无效onCreate(捆绑保存的InstanceState){
            super.onCreate(savedInstanceState);

            String [] from = new String [] {DBContract.Episodes.NAME};
            int [] to = new int [] {R.id.name};

            Log.i(“ LoaderManager”,“正在启动...”);
            getLoaderManager()。initLoader(0,null,this);

            adapter = new SimpleCursorAdapter(getActivity(),
                    R.layout.serie_list_item,null,从,到0);

            this.setListAdapter(adapter);
        }

        @Override
        public void onViewCreated(View view,Bundle savedInstanceState)捆绑{

        }

        @Override
        公共加载程序onCreateLoader(int id,Bundle args){
            Log.i(“ LoaderManager”,“正在创建加载程序...”);

            String [] projection = {DBContract.Episodes._ID,
                    DBContract.Episodes.NAME};
            CursorLoader cursorLoader = new CursorLoader(this.getActivity(),
                    Uri.parse(SerieProvider.CONTENT_URI +“ / episodes”),投影,
                    null,null,null);
            返回cursorLoader;
        }

        @Override
        public void onLoadFinished(加载程序加载程序,游标光标){
            Log.i(“ LoaderManager”,
                    “完成的加载项...-光标:” + cursor.getCount());
            adapter.swapCursor(cursor);
        }

        @Override
        public void …

sqlite android

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

如何使用 Jetpack Compose 管理鼠标右键/中键单击?

Jetpack Compose 中的可点击修饰符似乎无法在鼠标输入的情况下区分按钮类型

您知道如何管理这个用例吗?

android android-jetpack-compose

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

如何检查应用程序是否由apk安装

我需要检查该应用程序是通过 apk 还是从 google play 安装的。

我有一个从 google play 下载的 apk,而且该应用程序也可以在 google play 上使用。我想分两种情况。

我已经在下面读到过这个问题,但它是关于应用程序是由哪个应用程序商店安装的,这不是我想要的。
Android 包管理器如何知道要从市场网站安装什么?

有没有什么方法可以通过应用程序本身以编程方式检查应用程序是否由 apk 安装?任何帮助将不胜感激。

android google-play

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

Koin 2.2.1:我不能在活动中使用“by viewModel”

不能从 Activity 使用“by viewModel”

我想为一个 Activity 注入一个 ViewModel,所以我尝试了这个。但它失败了,Android Studio 找不到它的参考。

private val mainViewModel: MainViewModel by viewModel()
Run Code Online (Sandbox Code Playgroud)

我的活动 extendsAppCompatActivity和 gradle 依赖项包括这些库:

implementation 'androidx.core:core-ktx:1.3.2'
def koin_version = '2.2.1'
implementation "org.koin:koin-android:$koin_version"
implementation "org.koin:koin-androidx-scope:$koin_version"
implementation "org.koin:koin-androidx-viewmodel:$koin_version"
implementation "org.koin:koin-androidx-fragment:$koin_version"
implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$koin_version"
Run Code Online (Sandbox Code Playgroud)

我试过的:

下面的代码正在运行,但我想使用 Koin 2.2.0 的新默认“SavedStateHandle”功能。

private val mainViewModel: MainViewModel by inject()
Run Code Online (Sandbox Code Playgroud)

我发现此代码已包含在内,Android Studio 找不到它。

ActivityExt.kt:

inline fun <reified T : ViewModel> ComponentActivity.viewModel(
        qualifier: Qualifier? = null,
        noinline state: BundleDefinition? = null,
        noinline owner: ViewModelOwnerDefinition = { from(this, this) },
        noinline parameters: ParametersDefinition? …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-studio android-viewmodel koin

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

通过Google Play更新应用,该应用由APK文件安装

我有一个未通过Google Play商店部署的应用。

它具有自己的APK文件服务器,并且以前没有“更新”功能。由于它是专用应用程序,因此需要更新应用程序的用户只需要卸载当前应用程序并安装新应用程序即可。

现在,我需要通过Google Play更新这些已安装的应用程序。

问题是: 我可以通过Google Play商店更新通过APK文件安装的应用吗?

测试环境:

  • Google Play服务11.7.46
  • Play商店8.4.19
  • 银河S7
  • 仅发布了Koeran市场。


我试过了:

1)建立三个测试APK版本1、2、3。

2)部署版本2并通过Google Play商店更新版本3

3)[FAILED]通过ADB 安装APK 版本1,并且无法通过Google Play商店更新。(在我的测试应用的Google Play页面中,我可以看到“取消安装/打开”按钮

这正是我想要做的。

4)[FAILED]通过ADB 安装APK 版本2,无法通过Google Play商店更新。(在我的测试应用的Google Play页面中,我可以看到“取消安装/打开”按钮

我的一些同事说这种情况是可能的,但我没有做到。


我发现签名的APK与Google Play提取的APK之间的区别。通过二进制比较,许多文件是不同的。

比较图像

特别是AndroidManifest.xml,此信息已添加到Google Play提取的apk中。

<meta-data
    android:name="com.android.vending.derived.apk.id"
    android:value="1" />
Run Code Online (Sandbox Code Playgroud)

可以更新从Google Play发行页面下载的旧版本apk。


我在下面找到了答案,但是对于我来说似乎不起作用。

当更新可用时,手动安装的apk(不是从Play商店)会收到通知吗?

仅在满足以下两个条件的情况下,您才会收到更新/在Google Play“已安装的应用”标签中查看该应用:

APK套件名称与上传到Google Play的名称相同

用于在Play商店中对应用进行签名的密钥库与用于释放您手动安装的APK的密钥库相同。

installation android google-play

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