2015-11-09 2 views
1

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

Manifest.xml файл

`

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <uses-permission android:name="android.permission.INTERNET"/> 
    <uses-permission android:name="android.permission.WAKE_LOCK"/> 
    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" /> 
    <activity 
     android:name=".MainActivity" 
     android:theme="@android:style/Theme.NoDisplay" 
     android:label="@string/app_name" 
     android:excludeFromRecents="true" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
      <action android:name="android.intent.action.ASSIST" /> 
     </intent-filter> 
    </activity> 

    <receiver android:name=".NewAppWidget" 
     android:permission="android.permission.BIND_DEVICE_ADMIN"> 
     <intent-filter> 
      <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
      <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> 
     </intent-filter> 

     <meta-data 
      android:name="android.appwidget.provider" 
      android:resource="@xml/new_app_widget_info" /> 
    </receiver> 
</application> 

`

MainActivity.java

общественного класса Ма бездеятельности расширяет активность {

final static int ENABLE_ADMIN = 1; 
final static int SUCESS = -1; 

private ComponentName mAdminName = null; 

public final void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    mAdminName = new ComponentName(this, AdminManageReceiver.class); 

    DevicePolicyManager mDevicePolicyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); 

    Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); 

    if (!mDevicePolicyManager.isAdminActive(mAdminName)) { 
     showAdminManagement(); 
    } 

    if (mDevicePolicyManager.isAdminActive(mAdminName)) { 
     mDevicePolicyManager.lockNow(); 
    } 
    else { 
     Log.e("screenlock", "Unable to lock the phone D:"); 
    } 

    finish(); 
} 

private void showAdminManagement() { 
    // TODO Auto-generated method stub 
    Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); 
    intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mAdminName); 
    intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, 
      R.string.desc_enable_admin); 
    startActivityForResult(intent, ENABLE_ADMIN); 

} 

}

Appwidgetprovider.java

public class NewAppWidget extends AppWidgetProvider { 
private static final int ADMIN_INTENT = 15; 
private static final String description = "Sample Administrator description"; 
private DevicePolicyManager mDevicePolicyManager; 
private ComponentName mComponentName; 

@Override 
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
    // There may be multiple widgets active, so update all of them 
    final int N = appWidgetIds.length; 
    for (int i = 0; i < N; i++) { 
     //updateAppWidget(context, appWidgetManager, appWidgetIds[lock]); 
     Intent intent = new Intent(context,MainActivity.class); 
     PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); 
     RemoteViews View = new RemoteViews(context.getPackageName(), R.layout.new_app_widget); 
     View.setOnClickPendingIntent(R.id.imageButton, pendingIntent); 
     appWidgetManager.updateAppWidget(appWidgetIds, View); 


    } 
} 

AdminManageReceiver.java

общественности Класс AdminManageReceiver расширяет DeviceAdminReceiver { }

ответ

0

Во-первых, вы не можете быть в состоянии использовать один <receiver> как для DeviceAdminReceiverи в AppWidgetProvider. Части Android, которые работают с виджетами приложений, могут не иметь разрешения android.permission.BIND_DEVICE_ADMIN, блокируя их от работы с вашим <receiver>. Используйте два отдельных элемента <receiver>, один для вашего DeviceAdminReceiver и один для вашего AppWidgetProvider.

Во-вторых, имейте в виду, что виджеты приложений на заблокированном экране поддерживались только на Android с 4.2 по 4.4. Старые и новые версии Android не поддерживают эту функцию.

+0

i am bigner in android и я ставлю второй ресивер, но не работаю plz Редактируйте мой код и исправление Спасибо за ответ – Meerz

+0

plz дайте мне код виджета блокировки Android – Meerz

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