Ответ 1
Я действительно хочу сделать это из службы, вот как я нашел этот вопрос. Это самое близкое, что я придумал, поэтому просто бросаю его туда, пока не появится лучший ответ. Здесь можно сделать это из активности, которая почти нравится делать из службы:
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();
}
}
}
Затем в вашем сервисе, когда вам понадобится разрешение на вызов
private void openMainActivity() {
Intent mainIntent = new Intent(getContext(), MainActivity.class);
mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(mainIntent);
}
Чтобы сделать активность невидимой в вашем AndroidManifest.xml
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoDisplay"
android:excludeFromRecents="true"
android:screenOrientation="portrait">
</activity>
Предостережения:
В течение короткой секунды приложение, которое вы снимаете с экрана, потеряет фокус.
В течение короткой секунды ваше приложение будет передним приложением, поэтому не переходите через свои шнурки