小编Ily*_*man的帖子

以恢复历史记录的方式恢复我的应用程序

我正在编写一个SDK用于托管应用程序.我的SDK会创建一个需要恢复应用的通知,就像按下任务按钮并选择应用一样,或者长按主页按钮并选择您的应用.

这是我一直在尝试做的事情:

        PackageManager packageManager = context.getPackageManager();
        intent = packageManager.getLaunchIntentForPackage(context.getPackageName());
        intent.addFlags(Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY);
        intent.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
        intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

        PendingIntent pendingIntent = PendingIntent.getActivity(context, 10, intent, flags);
        Notification notification = new NotificationCompat.Builder(context).
            setContentIntent(pendingIntent).
            ...
            build();

        getNotificationManager().notify(NOTIFICATION_ID, notification);
Run Code Online (Sandbox Code Playgroud)

我一直在主机应用程序上测试这个,其中一个启动器活动具有"默认"的午餐模式(清单中没有设置启动模式),我的sdk还通过午餐模式"singleTask"获得了1个活动.

  1. 所以我在应用程序中午餐
  2. 启动我的SDK活动,它会在onCreat方法中触发测试通知.
  3. 我按回家
  4. 我点击通知.

在执行这些步骤后,我希望返回到我的活动,但它会打开主机启动器活动的另一个实例.我错过了什么?我该如何工作?

android android-activity

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

Android如何使用Proguard将我的所有类放在一个包中

我正在开发SDK,我的环境有SDK库和使用它的测试项目.

我想保护我的库代码免受我的库用户的影响,因为我需要对其进行模糊处理,只是它.

所以在我的库Module中的Android Studio中,在proguard-rules.pro文件中我添加了下一个脚本:

-dontpreverify
-optimizations !code/simplification/arithmetic

-keep class !com.example.**{ *; }
-keep public class com.example.sdk.Example{*;}
-keep public class com.example.sdk.IExampleCallback{*;}
-keep public class com.example.sdk.ui.ExampleActivity

-dontwarn android.util.Log

-repackageclasses 'com.example.security'
-allowaccessmodification
Run Code Online (Sandbox Code Playgroud)

这些类被混淆,但它们的包不会改变.我让Eric Lafortune(Proguard的作者)建议添加allowaccessmodification,但它没有帮助.我也尝试使用flattenpackagehierarchy,但它没有效果.

帮助我,如何将我的所有课程放在一个包中?

android proguard android-proguard

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

生成和安装SSL证书

当我成功将自定义SSL证书添加到Android 6模拟器(我对system.img文件进行持久更改)时,我觉得我破解了原子.但浏览器无法以任何方式识别它.我遵循了这个很棒的教程,我认为我在散列方面做错了.以下是我所做的全部步骤,以及到目前为止所做的工作.

我的系统

Windows 10,64 BIT
预建模拟器

  • 名称:Nexus_64
  • API:23
  • 目标:Android 6(Android API)
  • CPU/ABI x86/64
  • 磁盘大小3 GB

高级模拟器设置

  • RAM:512 MB
  • VM堆:128 MB
  • 内部存储2 GB(从右侧下拉菜单中选择)
  • SD卡:Studio管理的2 GB

系统文件

  • 从教程获取证书文件: 890c6016.0
  • 创建用于存储系统文件的空文件夹 c:\device_tmp

公用事业:

  • emulator/android_sdk/tools/emulator.exe
  • adb/android_sdk/platform-tools/adb.exe

我做了什么

启动模拟器:

 emulator -avd Nexus_64 -no-snapshot-load
Run Code Online (Sandbox Code Playgroud)

现在它启动,我打开命令行窗口

找到外部存储的名称,因为sdcard没有足够的存储空间用于映像文件.

adb shell df 
Run Code Online (Sandbox Code Playgroud)

在我的情况下/storage/13E4-1F02/有2GB的空间

安装证书

adb shell "rm /sdcard/"
adb push 890c6016.0 /sdcard/
adb shell "mount -o remount,rw /system"
adb shell "cp /sdcard/890c6016.0 /system/etc/security/cacerts/"
adb shell …
Run Code Online (Sandbox Code Playgroud)

ssl https android android-emulator

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

流Android屏幕

我试图让Truiton ScreenCapture示例,以便使用MediaProjection记录设备屏幕

保存录音时,它可以正常工作

    mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
    mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);

    String localFilePath = getLocalFilePath();
    mMediaRecorder.setOutputFile(localFilePath);

    mMediaRecorder.setVideoSize(DISPLAY_WIDTH, DISPLAY_HEIGHT);
    mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
    mMediaRecorder.setVideoFrameRate(30);
    mMediaRecorder.prepare();
Run Code Online (Sandbox Code Playgroud)

然而,当改变使用FileDescriptor时,它不是

    mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
    mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);

    String hostname = "10.26.100.18";
    int port = 2007;
    Socket socket = new Socket(InetAddress.getByName(hostname), port);
    ParcelFileDescriptor fileDescriptor = ParcelFileDescriptor.fromSocket(socket);
    LocalServerSocket localServerSocket = new LocalServerSocket(fileDescriptor.getFileDescriptor());

    mMediaRecorder.setOutputFile(localServerSocket.getFileDescriptor());

    mMediaRecorder.setVideoSize(DISPLAY_WIDTH, DISPLAY_HEIGHT);
    mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
    mMediaRecorder.setVideoFrameRate(30);
    mMediaRecorder.prepare();
Run Code Online (Sandbox Code Playgroud)

如果没有使用LocalServerSocket,那么mMediaRecorder.prepare()抛出异常,现在我正在使用它,在下面的方法中得到异常mMediaRecorder.getSurface()

private VirtualDisplay createVirtualDisplay() {
    return mMediaProjection.createVirtualDisplay("MainActivity",
            DISPLAY_WIDTH, DISPLAY_HEIGHT, mScreenDensity,
            DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,
            mMediaRecorder.getSurface(), null /*Callbacks*/, null
            /*Handler*/);
}
Run Code Online (Sandbox Code Playgroud)

例外

Caused by: java.lang.IllegalStateException: failed to get surface
   at …
Run Code Online (Sandbox Code Playgroud)

java android android-mediarecorder android-mediaprojection

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

如何在 Android Jetpack 导航中创建动态起始目的地

我正在构建一个 SMS 应用程序,使用Android Jetpack中的导航包在屏幕之间导航。

当用户第一次打开我的应用程序时,他们会进入权限屏幕,在该屏幕上他们需要授予默认应用程序权限和一些常规权限,然后才能进入主屏幕。

当用户更改默认短信应用程序然后重新打开我的应用程序时,我还需要显示权限屏幕。

我在 Android 导航文档中看到了条件导航部分。它建议将此逻辑放在主屏幕片段onViewCreated方法中。但我担心它会影响我的应用程序的启动时间。

有没有更有效的方法来实现这一点?理想情况下,我想在活动中处理这个逻辑。

navigation android android-jetpack

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

Google如何在API调用中验证SHA1和包名?

在API控制台中注册Android应用以进行Google API访问时,您必须输入应用SHA1证书指纹和应用的包名称.

现在我想知道当api调用只是简单的HTTP请求时,谷歌如何验证这些值是否正确(在最简单的情况下,当你不使用他们的API客户端时,可能附加一些标题值)?您在进行API调用时必须提供API密钥,但这并不能证明输入的值是正确的.

java security android google-api google-authentication

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

Java BigInteger替代方案

有没有BigInteger在java中使用的替代方案?

当您对其执行操作时BigInteger,始终会导致BigInteger创建新的操作.是否有其他实现,其中两个大整数之间的某些操作的结果存储在其中一个中?

例如,在Java中执行两个大整数的乘法时:创建a * b一个new BigInteger来托管结果.我想存储结果a.

我想这样做是为了提高我的算法的一些情况下的性能

java biginteger

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

Android:如何使用包含布局的工具

我如何使用工具:

xmlns:tools="http://schemas.android.com/tools"
Run Code Online (Sandbox Code Playgroud)

<include>

我有一个布局A,我使用工具用测试数据填充所有文本字段.我有布局B使用include到布局中的复制它.但是,当我这样做时,我没有看到测试数据A.

如何查看A包含的测试数据B

*两种布局都有xmlns:tools="http://schemas.android.com/tools,我甚至把它推到了布局标签上.

xml android android-layout android-tools-namespace

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

Android HTTP缓存如何工作?

我一直在调查Picaso,Android的图像下载和缓存库.我发现他们的缓存机制基于Android HttpResponseCache.文件说:

为了测量缓存有效性,该类跟踪三个统计信息:

  • 请求计数:自创建此缓存以来发出的HTTP请求数.
  • 网络计数:需要网络使用的请求数.
  • 命中计数:缓存提供响应的请求数.

那么Android Http缓存究竟是如何工作的呢?

  • Android如何知道缓存或不缓存文件,以及持续多长时间?
  • 什么时候清理完整的缓存,由谁?
  • 如何用我自己的覆盖默认的http缓存机制?我应该吗?

android caching picasso

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

如何在Android Studio中禁用设备监控?

Android Studio 1.2提供了新的设备监控功能,即使您的应用未运行,它也会在您插入设备时自动开始监控设备.

我注意到它减慢了Android Studio的工作速度(不是说它现在是Speedy Gonzales ......).它显示了监控的进度,从未完成.

我该如何关闭它?

在此输入图像描述

在此输入图像描述

android android-studio

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