【问题标题】:How to enable streaming app with SE for android如何使用 SE for android 启用流媒体应用
【发布时间】:2016-05-14 19:21:16
【问题描述】:

我问了一个关于 Ionic 应用程序的问题,该应用程序的 HTML 音频流无法在某些 Android 手机上正常工作。

我发现问题出在 SE for Android 中的“强制”模式。

由于我没有找到任何解决 Ionic/Cordova 问题的方法,我决定使用原生 Android SDK 启动应用程序。

很遗憾,我在使用原生 SDK 时遇到了同样的问题:该流无法在“强制执行”中设置了 SE for Android 的手机中运行。

我发现有问题的手机是三星 Galaxy S6、三星 Galaxy S6 Edge、三星 Galaxy Note 5 和索尼 Xperia Z4。

这是app的java代码:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import java.io.IOException;
import android.media.AudioManager;
import android.media.MediaPlayer;


public class Player extends AppCompatActivity {
    private MediaPlayer mp;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_player);
        mp = new MediaPlayer();
        mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
        try{
            mp.setDataSource("http://69.175.58.196:80/stream");
            mp.prepareAsync();
            mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mp) {
                    mp.start();
                }
            });
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }
}

这是AndroidManifest.xml的内容:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.goradio.ovoradioclub">
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />



    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".Player">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

我似乎遗漏了一些与 SE 相关的内容。

我也是 Linux 系统管理员,我知道处理 SE 的唯一方法是使用 root 访问权限。

该应用程序的想法是免费进入 PlayStore,因此人们可以只收听流媒体,因此根设备禁用 SE 对我来说不是一个选项。

【问题讨论】:

  • “我发现问题出在 SE for Android 中的“强制”模式”——嗯,你是怎么确定的?您的具体症状是什么?
  • 因为在“Enforcing”中带有 SE for android 的手机是唯一不起作用的手机。抱歉,我在 google 上没有找到关于 SE Android 的太多信息。我根据使用 SELinux 的经验确定了这一点。
  • 这并不能解释你的症状是什么。
  • 症状是在 SE 处于“强制”模式的手机中,流永远不会启动。没有显示错误,或者没有其他任何内容,它只是不起作用。任何其他手机都可以完美运行,应用程序启动并开始播放流。

标签: java android sdk selinux


【解决方案1】:

我似乎遗漏了一些与 SE 相关的内容。

我刚刚在运行 Android 6.0 的 Nexus 5 上运行了您的代码。 getenforce,在adb shell 上运行,在此设备上显示Enforcing。流播放得很好。 Nexus 5X 也是如此。

我不怀疑您在引用的设备上遇到了问题。但是,SE Enforcing 状态似乎是巧合,而不是问题的实际根源。

您可能希望查看 LogCat 以查看是否有任何有趣的消息。请注意,MediaPlayer 倾向于记录异常严重性的内容(例如,我认为在警告严重性下记录了错误)。此外,这些消息不会来自您的流程,因此请务必查看所有 LogCat,而不是仅显示您自己的流程的过滤视图。

【讨论】:

  • 不知道 LogCat。我会用它测试,如果我找到任何解决方案,请写在这里。
猜你喜欢
  • 1970-01-01
  • 2011-05-06
  • 1970-01-01
  • 1970-01-01
  • 2011-11-27
  • 1970-01-01
  • 1970-01-01
  • 2014-04-23
  • 1970-01-01
相关资源
最近更新 更多