2013-03-05 1 views
0
.

. Я пытаюсь создать приложение для Android, которое постоянно проверяет наличие новой записи в удаленной базе данных и предоставляет уведомление, если добавлена ​​новая запись. Я хочу повторить это для каждой добавленной записи.Android. Непрерывно проверяйте новую запись в базе данных и генерируйте уведомление, содержащее сведения о новой записи.

Я сделал следующее до настоящего времени Создал службу, которая извлекает данные из базы данных. Может ли кто-нибудь предложить, как лучше всего позвонить услуге снова и снова после определенного интервала или поддерживать работу и работать и многократно повторять метод. Что будет лучше?

ответ

1

Постоянная проверка новой записи в удаленной базе данных приведет к созданию нагрузки в приложении.

Вы можете использовать Google Cloud для обмена сообщениями с устройством. Это отправит уведомление на устройство каждый раз, когда удаленная база данных будет иметь новые записи.

Пожалуйста, проверьте это: http://developer.android.com/google/gcm/index.html

Шаги для GCM

1.Add следующие разрешения и приемника в AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 

<permission android:name="com.example.test.permission.C2D_MESSAGE" 
    android:protectionLevel="signature" /> 
<uses-permission android:name="com.example.test.permission.C2D_MESSAGE" /> 

<receiver 
     android:name="com.example.test.MyBroadcastReceiver" 
     android:permission="com.google.android.c2dm.permission.SEND" > 
     <intent-filter> 
      <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
      <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 
      <category android:name="com.example.test" /> 
     </intent-filter> 
    </receiver> 

Примечание: найти и заменить com.example.test с вашим именем упаковки

  1. MyBroadcastReceiver.java

    public class MyBroadcastReceiver extends BroadcastReceiver{ 
    
        private static final String TAG = "GCM"; 
        MyPrefs myPrefs ; 
    
    @Override 
    public void onReceive(Context context, Intent intent) { 
    
    myPrefs = new MyPrefs(context); 
    
    Log.d(TAG,"inside onReceive"); 
    
    String action = intent.getAction(); 
    if (action.equals("com.google.android.c2dm.intent.REGISTRATION")) { 
    
        handleRegistration(context,intent); 
    } else if (action.equals("com.google.android.c2dm.intent.RECEIVE")) { 
    
    
        handleMessage(context,intent); 
    } 
    } 
    private void handleRegistration(Context context,Intent intent) { 
    String registrationId = intent.getStringExtra("registration_id"); 
    String error = intent.getStringExtra("error"); 
    String unregistered = intent.getStringExtra("unregistered");  
    
    // registration succeeded 
    if (registrationId != null) { 
        Log.d(TAG, "Device_reg_id : "+registrationId); 
    
        // store registration ID on shared preferences 
        myPrefs.putString("DEVICE_REG_ID", registrationId); 
    
        // notify 3rd-party server about the registered ID 
        generateNotification(context, "Registration Sucessful", "Device register sucessfully!"); 
    } 
    
    // unregistration succeeded 
    if (unregistered != null) { 
        // get old registration ID from shared preferences 
        // notify 3rd-party server about the unregistered ID 
    } 
    
    // last operation (registration or unregistration) returned an error; 
    if (error != null) { 
        if ("SERVICE_NOT_AVAILABLE".equals(error)) { 
         // optionally retry using exponential back-off 
         // (see Advanced Topics) 
        } else { 
         // Unrecoverable error, log it 
         Log.i(TAG, "Received error: " + error); 
        } 
    } 
    } 
    private void handleMessage(Context context, Intent intent) { 
    
    String data = intent.getExtras().getString("data"); 
    generateNotification(context, "New Message is received", data); 
    } 
    
    private void generateNotification(Context context,String title,String text) { 
    
    NotificationCompat.Builder mBuilder = 
         new NotificationCompat.Builder(context) 
         .setSmallIcon(R.drawable.ic_launcher) 
         .setContentTitle(title) 
         .setContentText(text); 
    
    // Creates an explicit intent for an Activity in your app 
    Intent resultIntent = new Intent(context, MainActivity.class); 
    
    PendingIntent resultPendingIntent = PendingIntent.getBroadcast(context,0,resultIntent, 0);  
    mBuilder.setContentIntent(resultPendingIntent); 
    
    NotificationManager mNotificationManager = 
        (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
    // mId allows you to update the notification later on. 
    mNotificationManager.notify(0, mBuilder.build()); 
    } 
    
  2. MainActivity.java

    public class MainActivity extends Activity { 
    
    String device_reg_id; 
    
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    
    MyPrefs prefs = new MyPrefs(this); 
    device_reg_id = prefs.getString("DEVICE_REG_ID"); 
    
    if (device_reg_id == null) 
    { 
        Log.d("GCM", "Registration start"); 
        // registration 
        Intent registrationIntent = new Intent("com.google.android.c2dm.intent.REGISTER"); 
        // sets the app name in the intent 
        registrationIntent.putExtra("app", PendingIntent.getBroadcast(this, 0, new Intent(), 0)); 
        registrationIntent.putExtra("sender", "1850XXXX2785"); 
        startService(registrationIntent); 
    }else 
    { 
        // send a message to device its self 
    
         String api_key = "AIzaSyBXSJHPqFiYeYdAoYfN1XlI20Es"; 
    
         Sender sender = new Sender(api_key); 
    
         Message message = new Message.Builder() 
         .collapseKey("1") 
         .timeToLive(3) 
         .delayWhileIdle(true) 
         .addData("data", "Welcome!") 
         .build(); 
    
         Result result; 
         try { 
          result = sender.send(message, device_reg_id, 5); 
         } catch (IOException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } 
         } 
        } 
        } 
    
  3. MyPrefs.java

    public class MyPrefs { 
    
    private SharedPreferences sp; 
    private Editor editor; 
    
    public MyPrefs(Context context){ 
         sp = PreferenceManager.getDefaultSharedPreferences(context); 
         editor = sp.edit(); 
    } 
    public void putString(String key,String Value){ 
          editor.putString(key,Value); 
          editor.commit(); 
    } 
    public String getString(String key){ 
         return sp.getString(key,null); 
    } 
    } 
    

Примечание не забудьте импортировать гсм-се rver.jar из sdk \ extras \ google \ gcm \ gcm-server \ dist. если вы не найдете путь в sdk, чем установите Google Cloud Messaging для Android Libaray в разделе «Дополнительно» в Android SDK Manager

+0

Можете ли вы дать более подробную информацию об этом? Я новичок – Sushant

+0

См. Эту документацию http://developer.android.com/google/gcm/gcm.html –

+0

проверить мой обновленный ответ –

 Смежные вопросы

  • Нет связанных вопросов^_^