2016-09-28 123 views
0

我想調用位於類的片段中的方法。現在我收到錯誤:非靜態方法checkWriteStoragePermission()不能從靜態內容中引用。我真的沒有想法。我現在用google搜索了大約2天,沒有任何結果。非靜態方法checkWriteStoragePermission()不能從靜態內容引用

在那裏我試圖調用該方法的類:

public class MyFirebaseMessagingService extends FirebaseMessagingService { 

public static String sRecordDate; 

public void onMessageReceived(RemoteMessage remoteMessage) { 

    Intent intent = new Intent(this,MainActivity.class); 
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    PendingIntent pendingIntent = PendingIntent.getActivity(this,0,intent,PendingIntent.FLAG_ONE_SHOT); 
    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this); 
    notificationBuilder.setContentTitle("FCM NOTIFICATION"); 
    notificationBuilder.setContentText(remoteMessage.getNotification().getBody()); 
    notificationBuilder.setAutoCancel(true); 
    notificationBuilder.setSmallIcon(R.mipmap.ic_launcher); 
    notificationBuilder.setContentIntent(pendingIntent); 
    NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); 
    notificationManager.notify(0,notificationBuilder.build()); 

    for (Map.Entry<String, String> entry : remoteMessage.getData().entrySet()) { 
     String key = entry.getKey(); 
     String value = entry.getValue(); 

     Log.d(":", "key, " + key + " value " + value); 

     sRecordDate = value; 

     RecordingMode.checkWriteStoragePermission(); //HERE I AM GETIING THE ERROR 
    } 
} 

的方法,分片類:

public void checkWriteStoragePermission() { 
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
     if(ContextCompat.checkSelfPermission(getActivity(), android.Manifest.permission.WRITE_EXTERNAL_STORAGE) 
       == PackageManager.PERMISSION_GRANTED) { 
      mIsRecording = true; 
      try { 
       createVideoFileName(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      startRecord(); 
      mMediaRecorder.start(); 
      mChronometer.setBase(SystemClock.elapsedRealtime()); 
      mChronometer.setVisibility(View.VISIBLE); 
      mChronometer.start(); 
     } else { 
      if(shouldShowRequestPermissionRationale(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)) { 
       Toast.makeText(getActivity(), "app needs to be able to save videos", Toast.LENGTH_SHORT).show(); 
      } 
      requestPermissions(new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_WRITE_EXTERNAL_STORAGE_PERMISSION_RESULT); 
     } 
    } else { 
     mIsRecording = true; 
     try { 
      createVideoFileName(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     startRecord(); 
     mMediaRecorder.start(); 
     mChronometer.setBase(SystemClock.elapsedRealtime()); 
     mChronometer.setVisibility(View.VISIBLE); 
     mChronometer.start(); 
    } 
} 

我怎麼能輕易解決這個問題?因爲我無法將其轉換爲靜態方法。

親切的問候,

+0

您寫這行「)RecordingMode.checkWriteStoragePermission(;」是RecordingMode類名或對象名稱? – Sakalya

+0

RecordingMode.class是我的Fragment,而MyFiebaseMessagingService.class是我的外部類。 –

回答

3

但是,你正在使用這種方法,就好像它是靜態的方法(由類的名字叫吧),創造一個你有這樣的方法,並調用它在該實例的類的實例。你說這是'碎片」類,那麼:

Fragment fragment = new Fragment(); 
fragment.checkWriteStoragePermission(); 
+0

謝謝你!這比我想象的容易.. –

0

你的方法checkWriteStoragePermission不是static,但你嘗試直接從您的服務調用它。 嘗試編輯這樣的方法:

public static void checkWriteStoragePermission() { 
.... 
} 
+0

我不能這樣做。該方法必須是非靜態的 –

+0

比解決方案@Whatzs發佈的路要走 – Lennart

相關問題