2017-11-17 31 views
1

私はこれを解決する方法を混同mはgetSupportLoaderMangerまたはgetLoaderManager私はブロードキャストの発射時にブロードキャストレシーバー内でローダーマネージャーとそのコールバックを使用したいと思いますか?

を取得することができませんM、

public class MyBroadCastReceiver extends BroadcastReceiver implements LoaderManager.LoaderCallbacks<Cursor> { 
    int cpValue; 
    private CursorLoader cursorLoader; 
    private Context mContext; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     mContext = context; 
     mContext.getSupportLoaderManager().initLoader(1, null, context); 
    } 

    private void doTheTask(MyAsync task, Intent intent) { 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 
      // Android 4.4 (API 19) and above 
      task.execute(intent); 
     } else { 
      // Android 3.0 to Android 4.3 
      task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, intent); 
     } 
    } 

    @Override 
    public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) { 
     cursorLoader = new CursorLoader(mContext, Uri.parse("content://com.MyApplication.Provider/cte"), null, null, null, null); 
     return cursorLoader; 
    } 

    @Override 
    public void onLoadFinished(Loader<Cursor> arg0, Cursor cursor) { 
     if (cursor != null) { 
      cursor.moveToFirst(); 
      String res = "0"; 
      while (!cursor.isAfterLast()) { 
       res = cursor.getString(cursor.getColumnIndex("present")); 
       cursor.moveToNext(); 
      } 
      cpValue = Integer.valueOf(res); 
     } else { 
      cpValue = 0; 
     } 
    } 

    @Override 
    public void onLoaderReset(Loader<Cursor> arg0) { 
    } 
} 

私の質問は、それが活動してフラグメントで正常に動作しているどのように私は、ブロードキャストでloaderManagerを使用することができそうです。

どのようにBroadCast Receiverの内部でLoaderManagerを使用できますか?

答えて

0

のために使用されているhttps://developer.android.com/reference/android/app/LoaderManager.html

を見て、あなたが透明な活動のために行くことができますがあります。

たManifest.xml

<activity 
    android:name=".activity.TransparentActivity" 
    android:theme="@style/Theme.Transparent"> 
</activity> 

Style.xml

<style name="Theme.Transparent" parent="android:Theme"> 
    <item name="android:windowIsTranslucent">true</item> 
    <item name="android:windowBackground">@android:color/transparent</item> 
    <item name="android:windowContentOverlay">@null</item> 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:windowIsFloating">true</item> 
    <item name="android:backgroundDimEnabled">false</item> 
</style> 

TransparentActivity.java

import android.database.Cursor; 
import android.net.Uri; 
import android.os.Bundle; 
import android.support.v4.app.LoaderManager; 
import android.support.v4.content.CursorLoader; 
import android.support.v4.content.Loader; 
import android.support.v7.app.AppCompatActivity; 

public class TransparentActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<Cursor> { 

    private CursorLoader cursorLoader; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     getSupportLoaderManager().initLoader(1, null, this); 
    } 

    @Override 
    public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) { 
     cursorLoader = new CursorLoader(this, Uri.parse("content://com.example.yourprovider/cte"), null, null, null, null); 
     return cursorLoader; 
    } 

    @Override 
    public void onLoadFinished(Loader<Cursor> arg0, Cursor cursor) { 
     if (cursor != null) { 
      //Do your stuff 
     } 
     finish(); 
    } 

    @Override 
    public void onLoaderReset(Loader<Cursor> arg0) { 
    } 
} 

だから、あなたは、放送からこの活動を呼び出しますし、それが

を更新しようとしてます
Intent newIntent = new Intent(context,TransparentActivity.class); 
newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(newIntent); 

だからこれは私がそう

この本は

+0

[OK]を達成するためのいくつかの方法が間接的な方法を願って、あなたの問題を解決しようとしますが、私はこれをしようとします。 –

0

してくださいは、LoaderManagerはそれだけで一つの方法のために活動し、断片

関連する問題