但改变分辨率时,发送广播即可:
Intent intent_outputmode_change = new Intent(ACTION_OUTPUTMODE_CHANGE);
intent_outputmode_change.putExtra(OUTPUT_MODE, outputmode_entries_logic); intent_outputmode_change.putExtra("cvbs_mode", 1/0); this.getContext().sendBroadcast(intent_outputmode_change);
import android.content.Context;import android.content.Intent;import android.util.Log;public class DisplayUtil { private final static String ACTION_OUTPUTMODE_CHANGE = "android.intent.action.OUTPUTMODE_CHANGE"; private final static String OUTPUT_MODE = "output_mode"; private final static String ACTION_OUTPUTMODE_SAVE = "android.intent.action.OUTPUTMODE_SAVE"; private final static String ACTION_OUTPUTPOSITION_CHANGE = "android.intent.action.OUTPUTPOSITION_CHANGE"; private final static String ACTION_OUTPUTPOSITION_SAVE = "android.intent.action.OUTPUTPOSITION_SAVE"; private final static String ACTION_OUTPUTPOSITION_DEFAULT_SAVE = "android.intent.action.OUTPUTPOSITION_DEFAULT_SAVE"; private final static String OUTPUT_POSITION_X = "output_position_x"; private final static String OUTPUT_POSITION_Y = "output_position_y"; private final static String OUTPUT_POSITION_W = "output_position_w"; private final static String OUTPUT_POSITION_H = "output_position_h"; private final static String OUTPUT_POSITION_MODE = "output_position_mode"; private static final String TAG = "======"; public static void setOutputMode(Context c, String mode) { Intent intent_outputmode_change = new Intent(ACTION_OUTPUTMODE_CHANGE); intent_outputmode_change.putExtra(OUTPUT_MODE, mode); intent_outputmode_change.putExtra("cvbs_mode", 0); c.sendBroadcast(intent_outputmode_change); Intent intent_outputmode_save = new Intent(ACTION_OUTPUTMODE_SAVE); intent_outputmode_save.putExtra(OUTPUT_MODE, mode); c.sendBroadcast(intent_outputmode_save); } public static void setPosition(Context context, int l, int t, int r, int b, int mode) { Intent intent_output_position = new Intent(ACTION_OUTPUTPOSITION_CHANGE); intent_output_position.putExtra(OUTPUT_POSITION_X, l); intent_output_position.putExtra(OUTPUT_POSITION_Y, t); intent_output_position.putExtra(OUTPUT_POSITION_W, r); intent_output_position.putExtra(OUTPUT_POSITION_H, b); intent_output_position.putExtra(OUTPUT_POSITION_MODE, mode); context.sendBroadcast(intent_output_position); // savePosition(context, l,t,r,b); Log.i(TAG, "--------------------------------position Set"); Log.d(TAG, "--------------------------------set display axis x = " + l); Log.d(TAG, "--------------------------------set display axis y = " + t); Log.d(TAG, "--------------------------------set display axis width = " + r); Log.d(TAG, "--------------------------------set display axis height = " + b); } public static void savePosition(Context context, int left, int top, int width, int height) { Intent intent_output_position = new Intent(ACTION_OUTPUTPOSITION_SAVE); intent_output_position.putExtra(OUTPUT_POSITION_X, left); intent_output_position.putExtra(OUTPUT_POSITION_Y, top); intent_output_position.putExtra(OUTPUT_POSITION_W, width); intent_output_position.putExtra(OUTPUT_POSITION_H, height); context.sendBroadcast(intent_output_position);// Log.i(TAG, "--------------------------------position Set");// Log.d(TAG, "--------------------------------set display axis x = " + x);// Log.d(TAG, "--------------------------------set display axis y = " + y);// Log.d(TAG, "--------------------------------set display axis width = " + position_cur.width);// Log.d(TAG, "--------------------------------set display axis height = " + position_cur.height); } public static void savePositionDefault(Context context) { Intent intent_output_position = new Intent(ACTION_OUTPUTPOSITION_DEFAULT_SAVE); context.sendBroadcast(intent_output_position); }}
分辨率显示outputmode_entries_display和取值outputmode_entries_logic:
<!-- Display settings. The type of output mode to show. -->
<string-array name="outputmode_entries_display"> <item>480P</item> <item>576P</item> <item>720P 60HZ</item> <item>1080I 60HZ</item> <item>1080P 60HZ</item> <item>720P 50HZ</item> <item>1080I 50HZ</item> </string-array> <string-array name="outputmode_entries_logic"> <item>480p</item> <item>576p</item> <item>720p</item> <item>1080i</item> <item>1080p</item> <item>720p50hz</item> <item>1080i50hz</item> </string-array><receiver android:name="net.sunniwell.settings.sdzx.content.OutputSettingsBroadcastReceiver">
<intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> <action android:name="android.intent.action.OUTPUTMODE_CHANGE"/> <action android:name="android.intent.action.OUTPUTMODE_CANCEL"/> <action android:name="android.intent.action.OUTPUTMODE_SAVE"/> <action android:name="android.intent.action.OUTPUTPOSITION_CHANGE"/> <action android:name="android.intent.action.OUTPUTPOSITION_CANCEL"/> <action android:name="android.intent.action.OUTPUTPOSITION_SAVE"/> <action android:name="android.intent.action.OUTPUTPOSITION_DEFAULT_SAVE"/> <action android:name="android.intent.action.DISP_CHANGE"/> <action android:name="android.intent.action.REALVIDEO_ON"/> <action android:name="android.intent.action.REALVIDEO_OFF"/> <action android:name="android.intent.action.VIDEOPOSITION_CHANGE"/> <action android:name="android.intent.action.CVBSMODE_CHANGE"/> </intent-filter> </receiver>
如果setting没带处理,需要自己做:
settings源码的文件:
OutputSettingsBroadcastReceiver.java 改变分辨率。
HDMICheckHandler.java 自动检测hdmi最佳分辨率。
位置坐标文件,实现屏幕放大,缩小: /sys/class/ppmgr/ppscaler_rect: x:58,y:29,w:1280,h:720
分辨率文件: /sys/class/display/mode : 1080p