Я пытаюсь создать пограничную панель для S9 плюс Android API 28, которая может контролировать громкость мультимедиа.
Он работает правильно, но через некоторое время перестает отвечать. (5-10 минут Не уверен)
Я могу нажимать кнопки, но ничего не происходит.
Если я отключу его в меню на боковой панели и снова включу, он исчезнет и не будет отображаться. Я должен переустановить его, чтобы он снова заработал.
Я получил код из примеров, которые были предоставлены с Samsung SDK
https://developer.samsung.com/galaxy/edge
Изображение Edge Panel
https://imgur.com/s5a3yJl.jpg
Манифест Android
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.edgescreen"
android:versionCode="1"
android:versionName="1.0">
<uses-permission android:name="com.samsung.android.providers.context.permission.WRITE_USE_APP_FEATURE_SURVEY" />
<application
android:allowBackup="true"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<receiver android:name=".singleplus.LongClickCocktailProvider">
<intent-filter>
<action android:name="com.samsung.android.cocktail.v2.action.COCKTAIL_UPDATE" />
<action android:name="com.example.cocktailslooksample.action.ACTION_REMOTE_CLICK" />
</intent-filter>
<meta-data
android:name="com.samsung.android.cocktail.provider"
android:resource="@xml/edge_single_plus_list" />
</receiver>
</application>
</manifest>
Класс приемника вещания
public class LongClickCocktailProvider extends SlookCocktailProvider {
private static final String TAG = LongClickCocktailProvider.class.getSimpleName();
private static final String ACTION_REMOTE_CLICK = "com.example.cocktailslooksample.action.ACTION_REMOTE_CLICK";
private static RemoteViews mLongClickStateView = null;
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
String action = intent.getAction();
Log.d(TAG, "onReceive: " + action);
switch (action) {
case ACTION_REMOTE_CLICK:
performRemoteClick(context, intent);
break;
default:
break;
}
}
@Override
public void onUpdate(Context context, SlookCocktailManager cocktailManager,
int[] cocktailIds) {
if (mLongClickStateView == null) {
mLongClickStateView = createStateView(context);
}
cocktailManager.updateCocktail(cocktailIds[0], mLongClickStateView);
}
public void update_edge(Context context) {
SlookCocktailManager cocktailManager = SlookCocktailManager.getInstance(context);
int[] cocktailIds = cocktailManager.getCocktailIds(new ComponentName(context, LongClickCocktailProvider.class));
cocktailManager.updateCocktail(cocktailIds[0], mLongClickStateView);
}
private RemoteViews createStateView(Context context) {
RemoteViews stateView = new RemoteViews(context.getPackageName(),
R.layout.sample_edge_single_plus);
stateView.setOnClickPendingIntent(R.id.volumeD, getClickIntent(context, R.id.volumeD, 0));
stateView.setOnClickPendingIntent(R.id.volumeU, getClickIntent(context, R.id.volumeU, 0));
stateView.setOnClickPendingIntent(R.id.muteBt, getClickIntent(context, R.id.muteBt, 0));
stateView.setOnClickPendingIntent(R.id.defBt, getClickIntent(context, R.id.defBt, 0));
int level;
float vol;
AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
level = am.getStreamVolume(AudioManager.STREAM_MUSIC);
vol = ((float) level / 15) * 100;
level = (int) vol;
stateView.setTextViewText(R.id.vlvl, level + "%");
return stateView;
}
private PendingIntent getClickIntent(Context context, int id, int key) {
Intent clickIntent = new Intent(ACTION_REMOTE_CLICK);
clickIntent.putExtra("id", id);
clickIntent.putExtra("key", key);
PendingIntent pIntent = PendingIntent.getBroadcast(context, id, clickIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
return pIntent;
}
private void performRemoteClick(Context context, Intent intent) {
int id = intent.getIntExtra("id", -1);
AudioManager am;
int level;
float vol;
switch (id) {
case R.id.volumeU:
am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
am.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, AudioManager.FLAG_PLAY_SOUND);
level = am.getStreamVolume(AudioManager.STREAM_MUSIC);
vol = ((float) level / 15) * 100;
level = (int) vol;
mLongClickStateView.setTextViewText(R.id.vlvl, level + "%");
update_edge(context);
break;
case R.id.volumeD:
am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
am.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_LOWER, AudioManager.FLAG_PLAY_SOUND);
level = am.getStreamVolume(AudioManager.STREAM_MUSIC);
vol = ((float) level / 15) * 100;
level = (int) vol;
mLongClickStateView.setTextViewText(R.id.vlvl, level + "%");
update_edge(context);
break;
case R.id.muteBt:
am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
am.setStreamVolume(AudioManager.STREAM_MUSIC, 0, AudioManager.FLAG_PLAY_SOUND);
level = am.getStreamVolume(AudioManager.STREAM_MUSIC);
vol = ((float) level / 15) * 100;
level = (int) vol;
mLongClickStateView.setTextViewText(R.id.vlvl, level + "%");
update_edge(context);
break;
case R.id.defBt:
am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
am.setStreamVolume(AudioManager.STREAM_MUSIC, 10, AudioManager.FLAG_PLAY_SOUND);
level = am.getStreamVolume(AudioManager.STREAM_MUSIC);
vol = ((float) level / 15) * 100;
level = (int) vol;
mLongClickStateView.setTextViewText(R.id.vlvl, level + "%");
update_edge(context);
break;
default:
break;
}
}
}