2014-01-08 49 views
1

我捕捉照片並保存到我的圖庫中。捕捉圖像並保存時,一切都很完美。但是如果相機開着,如果我沒有拍照就按下後退按鈕,那麼應用程序會停止。按下後退按鈕在相機活動期間停止應用程序

我該如何解決這個問題?

這是我的代碼:

public class ImportCard extends Activity { 

private static final int CAMERA_PIC_REQUEST = 1111; 
ImageButton importimage; 

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_import_card); 

ImageButton importimage = (ImageButton) findViewById(R.id.importimage); 
importimage.setOnClickListener(new OnClickListener(){ 

@Override 
public void onClick(View v) { 

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
startActivityForResult(intent, CAMERA_PIC_REQUEST); 

     } 
    });  
} 

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == CAMERA_PIC_REQUEST) { 
     //2 
     Bitmap thumbnail = (Bitmap) data.getExtras().get("data"); 
     //3 
     ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
     thumbnail.compress(Bitmap.CompressFormat.JPEG, 100, bytes); 
     //4 
     File file = new File(Environment.getExternalStorageDirectory()+File.separator + "image.jpg"); 
     try { 
      file.createNewFile(); 
      FileOutputStream fo = new FileOutputStream(file); 
      //5 
      fo.write(bytes.toByteArray()); 
      fo.close(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
} 
} 

Android清單文件:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.mapcard" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.CAMERA" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
<uses-permission android:name="android.permission.CALL_PHONE"/> 
<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.CAMERA" /> 

<uses-feature android:name="android.hardware.camera" 
       android:required="true" /> 

<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="18" /> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/vcard" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name="com.example.mapcard.Splash" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name="com.example.mapcard.Main" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name="com.example.mapcard.NewCard" 
     android:label="@string/title_activity_new_card" > 
    </activity> 
    <activity 
     android:name="com.example.mapcard.ImportCard" 
     android:label="@string/title_activity_import_card"> 
    </activity> 
    <activity 
     android:name="com.example.mapcard.CardBox" 
     android:label="@string/title_activity_card_box" > 
    </activity> 
    <activity 
     android:name="com.example.mapcard.QRCode" 
     android:label="@string/title_activity_new_card" > 
    </activity> 
    <activity 
     android:name="com.example.mapcard.Template" 
     android:label="@string/title_template" > 
    </activity> 
    <activity 
     android:name="com.example.mapcard.DisplayCard" 
     android:label="@string/title_display_card" > 
    </activity> 
    <activity 
     android:name="com.example.mapcard.GoogleMap" 
     android:label="@string/title_activity_google" > 
    </activity> 
    <activity 
     android:name="com.example.mapcard.ViewCard" 
     android:label="@string/title_view_card" > 
    </activity> 
    <activity 
     android:name="com.example.mapcard.QRScan" 
     android:label="@string/title_activity_import_card" > 
    </activity> 
    <activity 
     android:name="com.example.mapcard.ViewTemplates" 
     android:label="@string/title_view_templates" > 
    </activity> 
    <activity 
     android:name="com.example.mapcard.SendEmail" 
     android:label="@string/title_send_email" > 
    </activity> 


</application> 

錯誤在我的logcat:

了java.lang.RuntimeException:不提供結果

錯誤我的設備上:

不幸的是,應用程序已經停止

+0

當按下後退按鈕時您想要做什麼? – Saqib

+0

我只想回到活動中,它應該是移動設備的正常功能。 – Umitk

+0

使用壓縮方法釋放相機與super.onBackPressed() – Saqib

回答

5

你只檢查requestCode。你也應該檢查resultCode的值。當用戶成功執行操作時,resultCode將等於RESULT_OK。如果用戶按下後退按鈕,則resultCode將爲RESULT_CANCELED。所以你的代碼必須像這樣修改。

protected void onActivityResult (int requestCode, int resultCode, Intent data) { 
    if (requestCode == CAMERA_PIC_REQUEST && resultCode == RESULT_OK) { 
     //2
1

在AndroidManifest.xml中添加

android:noHistory="false" 

該活動

+1

這不起作用。 – Umitk

+0

我想@akashsr懷疑真實的東西...你想發佈你的'AndroidManifest.xml'嗎? –

+0

已插入AndroidManifest.xml文件 – Umitk

-1

onActivityResult你應該檢查thumbnail爲空,如果是這樣,就返回。

編輯:這樣

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    ... 
    Bundle extras = data.getExtras(); 
    if (extras == null || extras.get("data") == null) return; 

    Bitmap thumbnail = (Bitmap) extras.get("data"); 
    ... 
} 

}

+1

感謝您的編輯。但是這並沒有拯救我從這個問題。仍是同樣的問題。 – Umitk

+0

看我編輯的代碼,現在也檢查extras包是否爲空。 – devisnik

+0

一般來說,logcat的堆棧跟蹤會很有幫助。 – devisnik

相關問題