在带有通知栏的torch应用程序中,当您在torch打开的情况下最小化应用程序时,如果您尝试单击通知,则表示无法访问相机。
代码是:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Acceder a la cámara.
if (!initTorch()) {
return;
}
// Encender el flash.
torch.on();
// Cargar interfaz gráfica.
setContentView(R.layout.activity_main);
Button button = (Button) findViewById(R.id.button_on_off);
button.setOnClickListener(this);
// Adquirir el wake lock.
PowerManager powerManager =
(PowerManager) getSystemService(POWER_SERVICE);
wakeLock = powerManager.newWakeLock(
PowerManager.PARTIAL_WAKE_LOCK, WAKE_LOCK_TAG);
wakeLock.setReferenceCounted(false);
if (!wakeLock.isHeld()) {
wakeLock.acquire();
}
// Iniciar el NotifactionManager.
notificationManager = (NotificationManager)
getSystemService(NOTIFICATION_SERVICE);
// Creamos la notificación.
createNotification();
}
private boolean initTorch() {
try {
// Acceder a la cámara.
torch = new Torch();
} catch (Exception e) {
// Mostrar mensaje de error al usuario.
Toast.makeText(this,
getResources().getString(R.string.text_error),
Toast.LENGTH_LONG).show();
// Salir de la aplicación.
finish();
return false;
}
return true;
}
private void createNotification() {
Intent intent = new Intent(this, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this,
0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
Notification notification = new NotificationCompat.Builder(this)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle(getResources().getString(R.string.app_name))
.setContentText(getResources().getString(R.string.notification_text))
.setOngoing(true)
.setContentIntent(pendingIntent)
.build();
notificationManager.notify(NOTIFICATION_ID, notification);
}
这是因为你的应用程序的一个实例已经在后台使用了摄像头。这就是为什么在它释放摄像头之前你无法访问它。只需在暂停时释放相机资源。把它放在简历上。它会起作用的。
问题是,通知中将调用onCreate()
(例如,请参见为什么即使设置了“否创建”标志,PendingEvent触发器仍会onCreate),如果旧的活动仍处于活动状态,则不应尝试创建
新火炬()
。
您可以尝试为活动设置
android:launchMode=“singleTask”
,但这并不总是有效(请参阅Pending intent always make new activity)。如果是这种情况,您应该开发一种更复杂的机制,例如,通知可能会请求旧活动释放摄像头,然后才会启动新活动。
不过,我担心这种解决办法会导致火炬出现可见的闪烁。
一次只能有一个应用程序获取相机。很可能你的意图是创建一个新任务,因此,你的活动有了一个新实例。由于您的前一个实例尚未释放相机(从您的代码中,我只能推断出,因为似乎相机是通过torch.on()
获得的,并且从未释放),第二个实例无法获得它。
简而言之,你应该:
我已创建WebView活动并正在加载https://web.doar.zone/c冠状病毒 这个URL需要相机权限,这是我在Android中获得的运行时权限。 下面是mainactivity.java的完整代码:
我正在尝试使用播放器模块访问android摄像头,但我遇到了以下错误,我不知道如何解决它。 这是我的密码。 我的建筑工人。规格: 有办法解决吗?
我在Ubuntu16.0.4上安装了一个新的Opencv,我编写了一个程序来获取相机流并存储一些帧。它“没有”问题。但不能通过Systemd工作。systemd单元处于活动状态(不要失败),但目标文件夹中没有帧存储。 我一步一步地寻找问题,我发现代码挂在打开摄像头流上。那就是:帽子。打开(“MyIpCameraAddress”) 我试着通过bash脚本而不是脚本来运行代码。但问题依然存在 说明=a
我是新的Android 6.0代码,请提供以下代码的解决方案: 注意:适用于打开库时
我遇到toast错误它将进入我在清单中正确地授予了摄像头权限 这是我的kt代码。 帮忙解决这个问题?
表情测试 图片转文字 相框 拍摄图片