android - 即使应用程序关闭,我也想在屏幕上显示 gif 图像
问题描述
通过鼠标单击,您实现了两件事:
- 声音正在播放
- GIF 图像正在显示
即使关闭正在使用服务的应用程序,我也试图在屏幕上显示 GIF,但由于在出现 GIF 图像时声音一直在播放,我找不到解决方案。
TheService.java (代码)
package gallery.suitapps.catwalking;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.media.SoundPool;
import android.os.Build;
import android.os.IBinder;
import android.provider.Settings;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;
import pl.droidsonroids.gif.GifImageView;
public class TheService extends Service {
final class MyThreadClass implements Runnable{
int service_id;
MyThreadClass(int service_id){
this.service_id=service_id;
}
@Override
public void run() {
}
}
SoundPool soundPool = null;
private int[] f10685s;
MainActivity main = new MainActivity();
public MediaPlayer player;
Context context;
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(this,"Service Starts" , Toast.LENGTH_SHORT).show();
player = MediaPlayer.create(this,R.raw.sound2);
player.setLooping(true);
player.start();
MainActivity.imageView.setImageResource(R.drawable.cat_gif);
return START_STICKY;
}
@Override
public void onDestroy() {
Toast.makeText(this,"Service Stops" , Toast.LENGTH_SHORT).show();
player.stop();
MainActivity.imageView.setImageResource(R.drawable.ic_launcher_background);
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
MainActivity.java (代码)
package gallery.suitapps.catwalking;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import pl.droidsonroids.gif.GifImageView;
public class MainActivity extends AppCompatActivity {
public static GifImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = findViewById(R.id.catgif);
}
public void startService (View view){
Intent intent = new Intent(this,TheService.class);
startService(intent);
// imageView.setImageResource(R.drawable.cat_gif);
}
public void stopService (View view){
Intent intent = new Intent(this,TheService.class);
stopService(intent);
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/startService"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:text="Start Service"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.501"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.134"
android:onClick="startService"/>
<Button
android:id="@+id/stopService"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:text="Stop Service"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.502"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.362"
android:onClick="stopService"/>
<pl.droidsonroids.gif.GifImageView
android:id="@+id/catgif"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/ic_launcher_background"
android:background="@android:color/holo_blue_dark"
/>
</android.support.constraint.ConstraintLayout>
解决方案
According to your requirement you need to implement system window alert in service class to show image in background when the app is closed
This is the solution for your requirement.
In manifest
add this
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
Then in your launcher activity
or any base activity add these permissions
private static final int CODE_DRAW_OVER_OTHER_APP_PERMISSION = 2084;
In onCreate()
add this
if (SDK_INT >= Build.VERSION_CODES.M && !Settings.canDrawOverlays(this)) {
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, CODE_DRAW_OVER_OTHER_APP_PERMISSION);
//finish();
}
Handle the request permission
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CODE_DRAW_OVER_OTHER_APP_PERMISSION) {
if (SDK_INT >= Build.VERSION_CODES.M && !Settings.canDrawOverlays(this)) {
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, CODE_DRAW_OVER_OTHER_APP_PERMISSION);
} else {
// do stuff here
}
}
}
and do this in service
class check the link below and do your stuff respectively
https://medium.com/@kevalpatel2106/create-chat-heads-like-facebook-messenger-32f7f1a62064
where image_layout
. xml is
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<pl.droidsonroids.gif.GifImageView
android:id="@+id/catgif"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/ic_launcher_background"
android:background="@android:color/holo_blue_dark"
/>
</android.support.constraint.ConstraintLayout>
Update:- You can make changed in image_layout file to show your GIF any size and gravity in the screen You can make changes with
android:layout_width="any_size"
android:layout_height="any_size"
推荐阅读
- php - 使用 XDebug 和 XAMPP 从 NetBeans 调试 PHP
- c# - .Net 5 中的 ClaimsPrincipal.HttpContext
- excel - 调试 Excel 宏
- ruby-on-rails - React 应用程序设计:在导航中显示每个页面的记录数
- r - to.period 函数保留“缺失值”
- java - JAVA 数组索引超出范围,即使 < 数组长度
- c++ - Total C++ Noob:Boost 和 std 的文件 I/O 问题
- sql - 如何在不手动指定 PK 的情况下仅将唯一数据加载到我的 oracle 表中?
- java - 创建一个名为 calcWinPercentage() 的方法。我们必须确保我们不除以 0 。如果没有玩过游戏,返回-1
- objective-c - 如何将对象 c 传输到 Swift aout collectionVIewLayout