2016-02-04 1 views
0

J'ai posé une question sur une application Ionic avec un flux audio HTML qui ne fonctionnait pas correctement avec certains téléphones Android.Comment activer l'application de streaming avec SE pour Android

J'ai identifié que le problème est le mode "Enforcing" dans SE pour Android.

Comme je n'ai trouvé aucune solution au problème avec Ionic/Cordova, j'ai décidé de lancer l'application avec le SDK Android natif.

Malheureusement, j'ai le même problème avec le SDK natif: le flux ne fonctionne pas dans les téléphones avec SE pour Android défini dans "Enforcing".

Les téléphones que j'ai identifiés avec le problème sont le Samsung Galaxy S6, le Samsung Galaxy S6 Edge, le Samsung Galaxy Note 5 et le Sony Xperia Z4.

Voici le code java de l'application:

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(); 
     } 
    } 
} 

Et voici le contenu de 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> 

Il est semble que je manque quelque chose lié à SE. Je suis également administrateur système Linux, et la seule façon que je connaisse pour faire face à SE est d'avoir un accès root.

L'idée de l'application est d'être dans le PlayStore gratuitement, donc les gens peuvent simplement écouter le flux, donc l'enracinement de l'appareil pour désactiver SE n'est pas une option pour moi.

+0

"J'ai identifié que le problème est le mode" Enforcing "dans SE pour Android" - um, comment avez-vous déterminé cela? Quels sont vos symptômes exacts? – CommonsWare

+0

Parce que les téléphones avec SE pour android dans "Enforcing" sont les seuls qui ne fonctionnent pas. Désolé, je n'ai pas trouvé beaucoup d'informations sur SE Android dans google. J'ai déterminé cela basé sur l'expérience avec SELinux. –

+0

Cela n'explique pas quels sont vos symptômes. – CommonsWare

Répondre

0

Il semble qu'il me manque quelque chose en rapport avec SE.

Je viens d'exécuter votre code sur un Nexus 5, sous Android 6.0. getenforce, exécuté sur adb shell, sur cet appareil montre Enforcing. Le flux joue bien. Il en va de même pour un Nexus 5X. Je ne doute pas que vous ayez des problèmes avec les périphériques cités. Cependant, il semblerait que l'état SE Enforcing soit une coïncidence, et non la source réelle de votre problème.

Vous pouvez consulter LogCat pour voir s'il y a des messages intéressants. Notez que MediaPlayer a tendance à consigner des données à des niveaux de gravité inhabituels (par exemple, une erreur que je considère comme étant consignée à la gravité de l'avertissement). En outre, ces messages ne proviendront pas de votre processus, alors assurez-vous de consulter l'intégralité de LogCat, et non une vue filtrée affichant uniquement votre propre processus.

+0

Ne savait pas à propos de LogCat. Je vais tester avec, et écrire ici si j'ai trouvé une solution. –