我正在编写一个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个活动.
在执行这些步骤后,我希望返回到我的活动,但它会打开主机启动器活动的另一个实例.我错过了什么?我该如何工作?
我正在开发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,但它没有效果.
帮助我,如何将我的所有课程放在一个包中?
当我成功将自定义SSL证书添加到Android 6模拟器(我对system.img文件进行持久更改)时,我觉得我破解了原子.但浏览器无法以任何方式识别它.我遵循了这个很棒的教程,我认为我在散列方面做错了.以下是我所做的全部步骤,以及到目前为止所做的工作.
Windows 10,64 BIT
预建模拟器
高级模拟器设置
系统文件
890c6016.0c:\device_tmp公用事业:
emulator 从 /android_sdk/tools/emulator.exeadb 从 /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) 我试图让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) 我正在构建一个 SMS 应用程序,使用Android Jetpack中的导航包在屏幕之间导航。
当用户第一次打开我的应用程序时,他们会进入权限屏幕,在该屏幕上他们需要授予默认应用程序权限和一些常规权限,然后才能进入主屏幕。
当用户更改默认短信应用程序然后重新打开我的应用程序时,我还需要显示权限屏幕。
我在 Android 导航文档中看到了条件导航部分。它建议将此逻辑放在主屏幕片段onViewCreated方法中。但我担心它会影响我的应用程序的启动时间。
有没有更有效的方法来实现这一点?理想情况下,我想在活动中处理这个逻辑。
在API控制台中注册Android应用以进行Google API访问时,您必须输入应用SHA1证书指纹和应用的包名称.
现在我想知道当api调用只是简单的HTTP请求时,谷歌如何验证这些值是否正确(在最简单的情况下,当你不使用他们的API客户端时,可能附加一些标题值)?您在进行API调用时必须提供API密钥,但这并不能证明输入的值是正确的.
有没有BigInteger在java中使用的替代方案?
当您对其执行操作时BigInteger,始终会导致BigInteger创建新的操作.是否有其他实现,其中两个大整数之间的某些操作的结果存储在其中一个中?
例如,在Java中执行两个大整数的乘法时:创建a * b一个new BigInteger来托管结果.我想存储结果a.
我想这样做是为了提高我的算法的一些情况下的性能
我如何使用工具:
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,我甚至把它推到了布局标签上.
我一直在调查Picaso,Android的图像下载和缓存库.我发现他们的缓存机制基于Android HttpResponseCache.文件说:
为了测量缓存有效性,该类跟踪三个统计信息:
- 请求计数:自创建此缓存以来发出的HTTP请求数.
- 网络计数:需要网络使用的请求数.
- 命中计数:缓存提供响应的请求数.
那么Android Http缓存究竟是如何工作的呢?
Android Studio 1.2提供了新的设备监控功能,即使您的应用未运行,它也会在您插入设备时自动开始监控设备.
我注意到它减慢了Android Studio的工作速度(不是说它现在是Speedy Gonzales ......).它显示了监控的进度,从未完成.
我该如何关闭它?


android ×9
java ×3
biginteger ×1
caching ×1
google-api ×1
https ×1
navigation ×1
picasso ×1
proguard ×1
security ×1
ssl ×1
xml ×1