Android系统截图后,点击截图后出现的编辑按钮,会调用图库打开,这个时候会出现闪退报错的现象。具体报错如下:
AndroidRuntime: FATAL EXCEPTION: main
AndroidRuntime: Process: com.android.gallery3d, PID: 2108
AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ActionBar.setDisplayOptions(int)' on a null object reference
AndroidRuntime: at com.android.gallery3d.filtershow.FilterShowActivity.loadXML(FilterShowActivity.java:352)
AndroidRuntime: at com.android.gallery3d.filtershow.FilterShowActivity.updateUIAfterServiceStarted(FilterShowActivity.java:263)
AndroidRuntime: at com.android.gallery3d.filtershow.pipeline.ProcessingService.onStart(ProcessingService.java:232)
AndroidRuntime: at com.android.gallery3d.filtershow.FilterShowActivity$1.onServiceConnected(FilterShowActivity.java:217)
AndroidRuntime: at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:2188)
AndroidRuntime: at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:2221)
AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:974)
AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:99)
AndroidRuntime: at android.os.Looper.loopOnce(Looper.java:201)
AndroidRuntime: at android.os.Looper.loop(Looper.java:288)
AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:7921)
AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1149)
此问题是由于图库在系统没有触摸屏的时候不会加载actionBar,导致空指针出现。解决方法就是针对报错进行规避即可。具体修改如下:
--- a/packages/apps/Gallery2/src/com/android/gallery3d/filtershow/FilterShowActivity.java
+++ b/packages/apps/Gallery2/src/com/android/gallery3d/filtershow/FilterShowActivity.java
@@ -125,6 +125,7 @@ import java.io.FileOutputStream;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Vector;
+import android.view.Window;
public class FilterShowActivity extends FragmentActivity implements OnItemClickListener,
OnShareTargetSelectedListener, DialogInterface.OnShowListener,
@@ -349,18 +350,21 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
setContentView(R.layout.filtershow_activity);
ActionBar actionBar = getActionBar();
public class FilterShowActivity extends FragmentActivity implements OnItemClickListener,
OnShareTargetSelectedListener, DialogInterface.OnShowListener,
@@ -349,18 +350,21 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
setContentView(R.layout.filtershow_activity);
ActionBar actionBar = getActionBar();
- actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
- actionBar.setCustomView(R.layout.filtershow_actionbar);
- actionBar.setBackgroundDrawable(new ColorDrawable(
- getResources().getColor(R.color.background_screen)));
+ if(actionBar != null){
+ actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
+ actionBar.setCustomView(R.layout.filtershow_actionbar);
+ actionBar.setBackgroundDrawable(new ColorDrawable(
+ getResources().getColor(R.color.background_screen)));
+
+ mSaveButton = actionBar.getCustomView();
+ mSaveButton.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ saveImage();
+ }
+ });
+ }
- mSaveButton = actionBar.getCustomView();
- mSaveButton.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View view) {
- saveImage();
- }
- });
mImageShow = (ImageShow) findViewById(R.id.imageShow);
mImageViews.add(mImageShow);
@@ -493,7 +497,7 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
private void processIntent() {
Intent intent = getIntent();
if (intent.getBooleanExtra(LAUNCH_FULLSCREEN, false)) {
- getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ //getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
mAction = intent.getAction();