如何使用SE为Android启用流媒体应用

时间:2016-02-04 23:18:16

标签: java android sdk selinux

我已经问过一个关于带有HTML音频流的Ionic应用程序的问题,该应用程序无法正常使用某些Android手机。

我已经确定问题是"执行"适用于Android的SE模式。

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

不幸的是,我在使用原生SDK时遇到了同样的问题:该流不能在手机中使用SE设置为"执行"。

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

这是应用程序的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不适合我。

1 个答案:

答案 0 :(得分:0)

  

似乎我遗漏了与SE有关的事情。

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

我不怀疑您在引用的设备上遇到问题。但是,看起来SE强制状态是巧合,而不是问题的实际来源。

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