我已经问过一个关于带有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不适合我。
答案 0 :(得分:0)
似乎我遗漏了与SE有关的事情。
我刚刚在运行Android 6.0的Nexus 5上运行了您的代码。 getenforce
,在adb shell
上运行,在此设备上显示Enforcing
。溪流播放得很好。
对于Nexus 5X也是如此。
我不怀疑您在引用的设备上遇到问题。但是,看起来SE强制状态是巧合,而不是问题的实际来源。
您可能希望查看LogCat以查看是否有任何有趣的消息。请注意,MediaPlayer
倾向于记录异常严重性的内容(例如,我认为在警告严重性时记录错误)。此外,这些消息不会来自您的过程,因此请务必查看所有LogCat,而不是仅显示您自己的过程的过滤视图。