我正在尝试在我的BOOT_COMPLETED接收器中启动一个IntentService,但在Android O(API 26)中,我得到:
java.lang.RuntimeException:
java.lang.IllegalStateException:
Not allowed to start service Intent { act=intent.action.update cmp=packageName.services.OwnService }:
app is in background
Run Code Online (Sandbox Code Playgroud)
(消息在一行中,但这样更易读)
我怎么能以正确的方式做到这一点?
android bootcompleted android-broadcastreceiver android-8.0-oreo
我遇到的问题是System.getenv()为环境变量返回null.我的密码存储在RELEASE_PASSWORD环境变量中.当我做:
$ echo $RELEASE_PASSWORD
它打印出正确的值,所以我知道变量已设置.
我最初signingConfig signingConfigs.release在发布版本中设置了类型,一切都运行正常,但我需要不同的签名配置,以适应不同的产品风格.如果我对密码进行硬编码,它的工作原理就像它想象的那样.当我尝试从环境变量中读取密码时,事情就变得很糟糕.
这是某种范围问题吗?
这就是我目前所拥有的build.gradle.
android {
...
signingConfigs {
release {
storeFile ...;
keyAlias ...;
storePassword System.getenv("RELEASE_PASSWORD");
keyPassword System.getenv("RELEASE_PASSWORD");
}
unsigned {
keyAlias "";
storePassword "";
keyPassword "";
}
}
buildTypes {
debug {
versionNameSuffix = "-DEBUG"
}
release {
}
}
flavorGroups "storeFront"
productFlavors {
def googleVariable = signingConfigs.release
def amazonVariable = signingConfigs.unsigned
google {
flavorGroup "storeFront"
signingConfig googleVariable
}
amazon {
flavorGroup "storeFront"
signingConfig amazonVariable …Run Code Online (Sandbox Code Playgroud) 我不想添加年份或月份.只需每天的小时,分钟和秒.如何使用Calendar对象来做呢?这是我的代码
// get a Calendar object with current time
Calendar cal = Calendar.getInstance();
// add 5 minutes to the calendar object
cal.add(Calendar.HOUR, 4);
cal.add(Calendar.MINUTE, 40);
Intent i = new Intent(this, Receiver.class);
i.putExtra("alarm_message", "O'Doyle Rules!");
// In reality, you would want to have a static variable for the request code instead of 192837
PendingIntent sender = PendingIntent.getBroadcast(this, 192837, i, PendingIntent.FLAG_UPDATE_CURRENT);
// Get the AlarmManager service
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sender);
Run Code Online (Sandbox Code Playgroud) 来自Eclipse我现在使用Android Studio进行开发.在Eclipse中,始终清楚哪些文件没有保存,但在Android工作室中,我发现已保存的打开文件与未保存的文件之间没有区别.另外,如果在构建和运行时有任何尚未保存的文件,Eclipse会询问我是否要在运行之前保存这些文件.这两个功能使开发变得更加容易.
所以有人知道:
我正在开发一个后台服务,在一段时间内对服务器进行轮询.关键是:我有一个调用另一个服务的IntentService(称为NotificationsService),但是这个请求的响应没有回来.并在logcat中出现:
06-19 05:12:00.151: W/MessageQueue(6436): Handler (android.os.Handler) {416659f0} sending message to a Handler on a dead thread
06-19 05:12:00.151: W/MessageQueue(6436): java.lang.RuntimeException: Handler (android.os.Handler) {416659f0} sending message to a Handler on a dead thread
06-19 05:12:00.151: W/MessageQueue(6436): at android.os.MessageQueue.enqueueMessage(MessageQueue.java:196)
06-19 05:12:00.151: W/MessageQueue(6436): at android.os.Handler.sendMessageAtTime(Handler.java:473)
06-19 05:12:00.151: W/MessageQueue(6436): at android.os.Handler.sendMessageDelayed(Handler.java:446)
06-19 05:12:00.151: W/MessageQueue(6436): at android.os.Handler.post(Handler.java:263)
06-19 05:12:00.151: W/MessageQueue(6436): at android.os.ResultReceiver$MyResultReceiver.send(ResultReceiver.java:50)
Run Code Online (Sandbox Code Playgroud)
我在这里看到类似的问题,但我感到困惑(我没有使用任何AsyncTask,我已经找了CommonsWare代码wakefullIntent但我不理解它).
这是NotificationsService.java的代码
public class NotificationsService extends IntentService {
private static int TIME_INTERVAL_MILIS=90000;
private static final int REFRESH=10;
private NotificationManager noteManager;
private static List<FlightStatusNote> …Run Code Online (Sandbox Code Playgroud) 使用android.hardware.Camera,为了使摄像机输出适当地跟踪设备运动,我们需要连接OrientationEventListener到setDisplayOrientation()方法Camera.这样,当用户扭转设备时,我们可以保持相机预览中的"向上"与现实世界中的"向上"同步.对于围绕Y轴旋转设备(即,从横向翻转到反向横向或向后),尤其如此.
对于大多数方向更改,android.hardware.camera2API似乎"正常工作".但是,对于Y轴旋转(横向 - >反向横向或反向横向),相机预览会被反转.
什么是调用相当于setDisplayOrientation()上Camera了Camera2 API,所以我们可以处理这种情况?
有许多已发布的报告,在旧版本的Android上,我们需要提供我们自己SecureRandom的初始化向量(IV),因为默认值不是随机的:
相反,随着API等级23,如果你尝试提供你自己的IV,你还必须调用setRandomizedEncryptionRequired(false)的KeyGenParameterSpec.Builder,否则你会得到异常的"加密时,调用者提供IV不允许".
据推测,在线路的某个地方,Android在IV生成方面从"可怕"变为"足够好".
什么是截止值,低于该截止值我们应该生成自己的IV而不是使用Android生成的IV?
我试图找出一个录制音频的例子,数据存储由应用程序处理,而不是MediaRecorder.用例包括将记录存储在内部存储器或加密记录.
原则上,这应该使用createPipe()on 创建的管道ParcelFileDescriptor,但我得到输出格式错误.
首先,这是一个示例项目,使用"自然"记录MediaRecorder,MediaRecorder直接写入外部存储上的输出文件.这个应用程序工作得很好,输出可以由记录它的Android设备或我的Linux机器上的VLC播放.
这是我createPipe()对这个项目的变化.从一般MediaRecorder配置(例如setOutputFormat())的角度来看,它与第一个相同,因此代码可能是正确的.
但是,我通过以下方式提供输出:
recorder.setOutputFile(getStreamFd());
Run Code Online (Sandbox Code Playgroud)
在getStreamFd()使用的地方createPipe(),产生一个后台线程来从管道中读取,并返回写入结束以供以下用户使用MediaRecorder:
private FileDescriptor getStreamFd() {
ParcelFileDescriptor[] pipe=null;
try {
pipe=ParcelFileDescriptor.createPipe();
new TransferThread(new AutoCloseInputStream(pipe[0]),
new FileOutputStream(getOutputFile())).start();
}
catch (IOException e) {
Log.e(getClass().getSimpleName(), "Exception opening pipe", e);
}
return(pipe[1].getFileDescriptor());
}
Run Code Online (Sandbox Code Playgroud)
TransferThread是一个经典的java.io流到流复制例程,增加了智能来刷新和同步输出文件:
static class TransferThread extends Thread {
InputStream in;
FileOutputStream out;
TransferThread(InputStream in, FileOutputStream out) {
this.in=in; …Run Code Online (Sandbox Code Playgroud) 我已经下载了最近发布的新的android工作室.我无法找到xml的UI设计预览,就像在eclipse中一样.对此有何帮助或建议?
我试图测试N Developer Preview的网络安全配置功能的所有方面.我有大部分工作,但我被自签名证书场景困扰.
根据文档,Android N应该对PEM或DER文件感到满意,因为它适用于其他证书验证方案.但是,我不使用自签名证书,并且我尝试使用此工作继续运行到证书路径验证异常中.
为了测试,我thin用作服务器,在我的开发机器上运行,可以通过N模拟器访问.自签名证书适用于我的开发机器上的浏览器,如果我切换到运行thinsans SSL,应用程序可以很好地到达服务器.所以,这不是连接问题.
我使用本网站上的说明创建了自签名证书:
sudo openssl genrsa -out "/etc/[webserver]/ssl/example.key" 2048
sudo openssl req -new -key "/etc/[webserver]/ssl/example.key" \
-out "/etc/[webserver]/ssl/example.csr"
sudo openssl x509 -req -days 365 -in "/etc/[webserver]/ssl/example.csr" \
-signkey "/etc/[webserver]/ssl/example.key" \
-out "/etc/[webserver]/ssl/example.crt"
Run Code Online (Sandbox Code Playgroud)
根据此Stack Overflow回答,该example.crt文件是PEM文件.在其他地方,我看到了创建"组合PEM"文件的说明.但是,我尝试了这两个,没有运气.
在网络安全配置方面的东西,我曾经尝试都<domain-config>和<debug-overrides>.后者看起来像:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<debug-overrides>
<trust-anchors>
<certificates src="@raw/selfsigned"/>
</trust-anchors>
</debug-overrides>
</network-security-config>
Run Code Online (Sandbox Code Playgroud)
但是,在任何一种情况下我都会得到验证错误.
作为原始资源,我们究竟应该将PEM或DER文件作为原始资源投入使用?