2016-08-20 2 views
0

Ich habe eine Alarm-App und ich habe eine Textansicht und wenn ich sie drücke, wird es mich zum Audio-Ordner weiterleiten, dann kann ich ein Lied wählen und spiele es als Alarm. Nachdem ich es gewählt habe, dann klicke auf meinen eingestellten Alarmknopf, es würde nach wie vielen Sekunden abstürzen. Der Fehler weist auf den Broadcast-Empfänger hin.Wie man eine Audiodatei an einen Rundfunkempfänger übergibt und sie als Alarm spielt

Das ist mein Set Alarm Aktivität:

@Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

     Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
     Uri uri = Uri.parse(Environment.getExternalStorageDirectory().getPath() 
       + "/Audio/"); 
     intent.setDataAndType(uri, "audio/*"); 
     startActivityForResult(intent, 1); 

    } 

    @Override 
    protected void onActivityResult(int requestCode,int resultCode,Intent data){ 

     if(requestCode == 1){ 

      if(resultCode == RESULT_OK){ 

       //the selected audio. 
       Uri uri = data.getData(); 
       Intent n = new Intent(this, AlarmReceiver.class); 
       n.putExtra("song", uri.toString()); 

      } 
     } 
     super.onActivityResult(requestCode, resultCode, data); 
    } 

-Code für Broadcast-Empfänger:

@Override 
public void onReceive(Context context, Intent intent) { 
    MediaPlayer mp; 

    Intent in = new Intent(); 

    Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
    Ringtone r = RingtoneManager.getRingtone(context.getApplicationContext(), notification); 
    r.play(); 
    Uri ir = in.getParcelableExtra("song"); 
    mp = MediaPlayer.create(context, ir); 
    mp.start(); 
} 

Logcat

08-21 04:05:35.011 1553-1571/system_process E/BluetoothAdapter: Bluetooth binder is null 
08-21 04:05:35.012 1553-1571/system_process E/KernelCpuSpeedReader: Failed to read cpu-freq 
java.io.FileNotFoundException: /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state: open failed: ENOENT (No such file or directory) 
    at libcore.io.IoBridge.open(IoBridge.java:452) 
    at java.io.FileInputStream.<init>(FileInputStream.java:76) 
    at java.io.FileInputStream.<init>(FileInputStream.java:103) 
    at java.io.FileReader.<init>(FileReader.java:66) 
    at com.android.internal.os.KernelCpuSpeedReader.readDelta(KernelCpuSpeedReader.java:49) 
    at com.android.internal.os.BatteryStatsImpl.updateCpuTimeLocked(BatteryStatsImpl.java:8002) 
    at com.android.server.am.BatteryStatsService.updateExternalStats(BatteryStatsService.java:1366) 
    at com.android.server.am.BatteryStatsService$BatteryStatsHandler.handleMessage(BatteryStatsService.java:125) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.os.HandlerThread.run(HandlerThread.java:61) 
    at com.android.server.ServiceThread.run(ServiceThread.java:46) 
Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory) 
    at libcore.io.Posix.open(Native Method) 
    at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186) 
    at libcore.io.IoBridge.open(IoBridge.java:438) 
    at java.io.FileInputStream.<init>(FileInputStream.java:76) 
    at java.io.FileInputStream.<init>(FileInputStream.java:103) 
    at java.io.FileReader.<init>(FileReader.java:66) 
    at com.android.internal.os.KernelCpuSpeedReader.readDelta(KernelCpuSpeedReader.java:49) 
    at com.android.internal.os.BatteryStatsImpl.updateCpuTimeLocked(BatteryStatsImpl.java:8002) 
    at com.android.server.am.BatteryStatsService.updateExternalStats(BatteryStatsService.java:1366) 
    at com.android.server.am.BatteryStatsService$BatteryStatsHandler.handleMessage(BatteryStatsService.java:125) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.os.HandlerThread.run(HandlerThread.java:61) 
    at com.android.server.ServiceThread.run(ServiceThread.java:46) 
08-21 04:05:35.012 1553-1571/system_process E/KernelUidCpuTimeReader: Failed to read uid_cputime 
    java.io.FileNotFoundException: /proc/uid_cputime/show_uid_stat: open failed: ENOENT (No such file or directory) 
     at libcore.io.IoBridge.open(IoBridge.java:452) 
     at java.io.FileInputStream.<init>(FileInputStream.java:76) 
     at java.io.FileInputStream.<init>(FileInputStream.java:103) 
     at java.io.FileReader.<init>(FileReader.java:66) 
     at com.android.internal.os.KernelUidCpuTimeReader.readDelta(KernelUidCpuTimeReader.java:71) 
     at com.android.internal.os.BatteryStatsImpl.updateCpuTimeLocked(BatteryStatsImpl.java:8031) 
     at com.android.server.am.BatteryStatsService.updateExternalStats(BatteryStatsService.java:1366) 
     at com.android.server.am.BatteryStatsService$BatteryStatsHandler.handleMessage(BatteryStatsService.java:125) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:148) 
     at android.os.HandlerThread.run(HandlerThread.java:61) 
     at com.android.server.ServiceThread.run(ServiceThread.java:46) 
    Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory) 
     at libcore.io.Posix.open(Native Method) 
     at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186) 
     at libcore.io.IoBridge.open(IoBridge.java:438) 
     at java.io.FileInputStream.<init>(FileInputStream.java:76) 
     at java.io.FileInputStream.<init>(FileInputStream.java:103) 
     at java.io.FileReader.<init>(FileReader.java:66) 
     at com.android.internal.os.KernelUidCpuTimeReader.readDelta(KernelUidCpuTimeReader.java:71) 
     at com.android.internal.os.BatteryStatsImpl.updateCpuTimeLocked(BatteryStatsImpl.java:8031) 
     at com.android.server.am.BatteryStatsService.updateExternalStats(BatteryStatsService.java:1366) 
     at com.android.server.am.BatteryStatsService$BatteryStatsHandler.handleMessage(BatteryStatsService.java:125) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:148) 
     at android.os.HandlerThread.run(HandlerThread.java:61) 
     at com.android.server.ServiceThread.run(ServiceThread.java:46) 
08-21 04:05:35.012 1553-1571/system_process E/KernelWakelockReader: neither /proc/wakelocks nor /d/wakeup_sources exists 
08-21 04:05:35.017 1553-1571/system_process W/BatteryStatsImpl: Couldn't get kernel wake lock stats 
08-21 04:05:35.086 2268-10915/com.google.android.gms D/DropBoxEntryAddedChimeraService: User is not opted-in to Usage & Diagnostics. 
08-21 04:05:54.610 1553-1575/system_process W/ProcessCpuTracker: Skipping unknown process pid 11191 
08-21 04:05:54.610 1553-1575/system_process W/ProcessCpuTracker: Skipping unknown process pid 11196 
08-21 04:06:00.026 1553-1567/system_process I/ProcessStatsService: Prepared write state in 1ms 
08-21 04:06:00.052 1553-1565/system_process W/BroadcastQueue: Skipping deliver [foreground] BroadcastRecord{2cfd4a7 u-1 android.intent.action.TIME_TICK} to ReceiverList{53b0aef 10154 myapps.wycoco.com.alarmapp/10064/u0 remote:8835bce}: process crashing 
08-21 04:06:47.744 2268-11950/com.google.android.gms I/EventLogChimeraService: Aggregate from 1471750607524 (log), 1471750607524 (data) 
08-21 04:06:47.857 2268-11954/com.google.android.gms D/DropBoxEntryAddedChimeraService: User is not opted-in to Usage & Diagnostics. 
08-21 04:07:00.053 1553-1712/system_process W/BroadcastQueue: Skipping deliver [foreg 
+0

Veröffentlichen Sie das gesamte Fehlerprotokoll und Ihren relevanten Code. – Shaishav

+0

ich kann immer noch kein Bild im neuen –

+0

Posten Sie nicht das Bild. Veröffentlichen Sie den Code mit der Schaltfläche "Bearbeiten" in der unteren linken Ecke Ihres Posts. – Shaishav

Antwort

-1

versuchen diese.

@Override 
    public void onReceive(Context context, Intent intent) 
    { 
    AudioManager audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 
      MediaPlayer player = MediaPlayer.create(getApplicationContext(), RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)); 
      try { 
       player.setVolume((float) (audio.getStreamVolume(AudioManager.STREAM_NOTIFICATION)/7.0), 
         (float) (audio.getStreamVolume(AudioManager.STREAM_NOTIFICATION)/7.0)); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 

      player.start(); 
    } 
+0

Postleitzahl ... ... –

+0

08-20 10: 19: 05.910 3417-3464/myapps.wycoco.com.alarmapp E/Oberfläche: getSlotFromBufferLocked: unbekannter Puffer: 0xb4017a90 –

+0

es hat immer noch diesen Fehler –

0

Erstellen Sie eine globale Variable für Song-URI in Ihrer Set Alarm-Klasse.

Uri songUri; 

Auf Ihrer onItemClick Methode ändern setDataAndType(uri, "*/*");-setDataAndType(uri, "audio/*"); so kann der Chooser nur Audio-Dateien für den Benutzer anzuzeigen.

Sie müssen auch startActivity(Intent.createChooser(intent, "Open"); zu startActivityForResult(Intent.createChooser(intent, "Open"), 1); ändern dies wird Ihnen ermöglichen, was auch immer aus der Auswahl ausgewählt wurde.

Überschreiben onActivityResult für die gleiche Klasse. Setzen Sie dann die globale Variable songUri.

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (data != null) { 
     songUri = data.getData(); 
    } 
} 

schließlich legte extra die Absicht, die dem AlarmReceiver.class zeigt

intent.putExtra("song",songUri); 

auf dem Broadcast-Empfängerklasse ändern mp = MediaPlayer.create(context, R.raw.closer); dieser

try{ 
    mp = MediaPlayer.create(context, (Uri)intent.getParcelableExtra("song")); 
}catch(NullPointerException e) { 
    mp = MediaPlayer.create(context, R.raw.closer); 
} 

A Nullpointer wird ausgelöst, wenn kein Lied gewählt wurde, weil intention.getParc elabelExtra ("Lied") wird null sein. Wenn ein Lied ausgewählt ist, platziere es auf dem Try Block und erhalte das Extra.

+0

Wie kann ich Datenquelle für Standard Google Play festlegen Musik für ein Lied spielen? –

Verwandte Themen