Desidero creare un'app in cui sia necessario utilizzare MediaProjectionManager in un servizio. Ma non posso risolverlo poiché 'startActivityForResult' non può essere utilizzato nella classe di servizio.Android MediaProjectionManager in servizio
risposta
Voglio davvero farlo da un servizio, che è il modo in cui ho trovato questa domanda. Questa è la cosa più vicina a cui mi sono avvicinato, quindi buttale qui, finché non arriva una risposta migliore. Ecco un modo per farlo da un'attività che è quasi come farlo da un servizio:
import static your.package.YourClass.mediaProjectionManager;
public class MainActivity extends Activity {
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(null);
mediaProjectionManager = (MediaProjectionManager)getContext().getSystemService(MEDIA_PROJECTION_SERVICE);
startActivityForResult(mediaProjectionManager.createScreenCaptureIntent(), 1);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) {
if (resultCode == Activity.RESULT_OK) {
mediaProjection = mediaProjectionManager.getMediaProjection(resultCode, data);
this.finish();
}
}
}
Poi, nel tuo servizio quando mai avete bisogno chiamate il permesso
private void openMainActivity() {
Intent mainIntent = new Intent(getContext(), MainActivity.class);
mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(mainIntent);
}
Per rendere l'attività invisibile nella vostra AndroidManifest .xml
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoDisplay"
android:excludeFromRecents="true"
android:screenOrientation="portrait">
</activity>
Avvertenze:
Per un breve secondo l'applicatio n stai facendo lo screenshot perderà la concentrazione.
Per un breve secondo la vostra applicazione sarà l'applicazione in primo piano, in modo da non inciampare i propri lacci delle scarpe
Per evitare i brevi secondi problemi, l'altra domanda/risposta di @netsplit potrebbe funzionare http://stackoverflow.com/questions/33398211/how-do-i-get-a-media-project-manager-without-disturbing- the-current-foregroun –
Ok, sono riuscito a fare questo la sua non il più pulito di modi, ma funziona:
- Servizio Bound locale: Effettuare il servizio a Local Bound Service, il che significa che il servizio passerà un riferimento di se stesso all'attività principale.
- passare un'istanza della attività al Servizio: Passare il riferimento della vostra attività al servizio del Servizio Connection-> onServiceConnected() nella classe di attività
- chiamata la startSubActivity: svolgere l'attività per istanza nel tuo servizio per chiamare la funzione startActivityForResult.
Nota: Dopo essere stato chiamato lo startSubActivity sarà preso in onActivityResult() nella classe di attività. Sarà necessario sovrascrivere questa funzione nell'attività e utilizzare il riferimento al servizio per tornare alla classe di servizio. Inoltre, puoi annullare l'attività, dal servizio al completamento.
Spero che questo abbia senso, mi dispiace per non aver incluso alcun codice. Se avete domande, vi preghiamo di aiutarvi in ulteriori dettagli.
che è solo se l'attività è ancora in esecuzione. un servizio può essere eseguito anche in assenza di attività –
- 1. Avvio del servizio in Android
- 2. Creazione del servizio in background in Android
- 3. Servizio Android ucciso
- 4. Servizio Android - Ping URL
- 5. Esercitazione servizio Web Android
- 6. Test servizio Android
- 7. Servizio sfondo Android in Delphi XE5
- 8. Differenza tra servizio e discussione in Android?
- 9. Android: utilizzo della rete in un servizio
- 10. Come scaricare file con servizio in Android?
- 11. Come si collega questo servizio in Android?
- 12. Come avviare automaticamente il servizio in Android?
- 13. Il servizio è trapelato IntentReceiver in Android
- 14. Servizio finestra di sovrapposizione in Android
- 15. Silent Google Accedi in servizio sfondo Android
- 16. Servizio musicale di sottofondo Android
- 17. servizio Android startService() e bindService()
- 18. Servizio Android di lunga durata
- 19. Android - interazione servizio e attività
- 20. Android inizio attività dal servizio
- 21. Paho MQTT Servizio Android Numero
- 22. Servizio Android onStartCommand mai chiamato
- 23. Rilevamento servizio di rete Android
- 24. Rilevamento servizio UPnP nativo Android
- 25. Android - Servizio non supportato: audio
- 26. servizio di Android si ferma
- 27. Servizio Android che controlla MediaPlayer
- 28. Client servizio WSDL/SOAP Android
- 29. Servizio non disponibile - Geocoder Android
- 30. Discovery servizio Android Wifi diretto
Avresti bisogno di un'attività in cui l'utente possa indicare che vogliono iniziare a registrare schermate o screencast, e da lì puoi usare 'startActivityForResult()'. Non sono a conoscenza di alcun mezzo per richiedere una 'MediaProjection' che non implichi' startActivityForResult() '. – CommonsWare
Devo fare uno screenshot per alcune app specifiche. Quindi devo rilevare le app da un servizio e devo prendere screenshot usando MediaProjection. Per favore, fai un esempio se puoi. Sono un principiante. Grazie –
Quello che vuoi non è davvero possibile. L'utente deve essere coinvolto al momento dell'avvio della registrazione. Inoltre, Google ha progressivamente bloccato la capacità di rilevare quale app è in primo piano. A questo punto (Android 6.0), è sicuro dire che se un'app può determinare quale altra app è in primo piano, è necessario correggere un problema di sicurezza. – CommonsWare